Перейти к содержанию

10. Сигналы процессов в Linux

Введение

В операционных системах семейства Linux процессы являются основой работы всех программ — от простых пользовательских приложений до сетевых служб и системных демонов. Однако одной только возможности запускать и останавливать процессы недостаточно. Необходимо управлять ими, передавать им команды, уведомлять их о событиях и корректно завершать при необходимости.

Для этого в Linux существует механизм сигналов — системных уведомлений, которые операционная система или пользователь может отправить процессу. Каждый сигнал имеет свой номер и назначение: завершение, пауза, продолжение, перезапуск конфигурации, диагностика и многое другое.

Для сетевого администратора умение работать с сигналами особенно важно, поскольку многие серверные приложения (SSH, веб-сервисы, DNS-сервера, демоны логирования) используют сигналы для перезагрузки конфигурации, корректной остановки или перезапуска.


Что такое сигнал

Сигнал — это асинхронное сообщение, отправляемое процессу операционной системой или пользователем.

Сигналы позволяют:

  • корректно завершать процессы;
  • приостанавливать и возобновлять выполнение;
  • уведомлять о событиях;
  • перезапускать конфигурацию демонов;
  • завершать зависшие процессы.

Сигнал работает на “системном уровне”: процесс получает уведомление и либо обрабатывает его специальным способом, либо завершается.


Когда создаются сигналы

Сигналы могут появляться в следующих ситуациях:

1) От пользователя

Например, при нажатии:

  • Ctrl+C — отправка SIGINT,
  • Ctrl+Z — отправка SIGSTOP.

2) От операционной системы

  • ошибка сегментации → SIGSEGV;
  • переполнение памяти → SIGKILL;
  • завершение родительского процесса → SIGHUP.

3) От других процессов

Например, администратор отправляет сигнал командой kill.

4) От ядра

Когда нужно уведомить процесс о системном событии.


Список основных сигналов

Команда для просмотра всех сигналов:

kill -l

Вот самые важные сигналы:

Сигнал Номер Назначение
SIGHUP 1 Перезапуск конфигурации, сигнал “повесили трубку”
SIGINT 2 Прерывание с клавиатуры (Ctrl+C)
SIGQUIT 3 Прерывание с дампом памяти
SIGKILL 9 Принудительное убийство процесса (необрабатываемый)
SIGTERM 15 Корректное завершение процесса
SIGSTOP 19 Приостановка процесса (как Ctrl+Z)
SIGCONT 18 Возобновление процесса
SIGUSR1 / SIGUSR2 10/12 Пользовательские сигналы для скриптов
SIGSEGV 11 Ошибка сегментации (падение программы)
SIGALRM 14 Срабатывание таймера
SIGCHLD 17 Окончание дочернего процесса

Отправка сигналов

Команда kill

Несмотря на название, kill отправляет любой сигнал, а не только завершение.

Синтаксис:

kill -SIGNAL PID

Примеры:

  1. Корректное завершение:
kill -15 1234
  1. Принудительное завершение:
kill -9 1234
  1. Перезапуск конфигурации демона (очень важно для админов):
kill -HUP 5678
  1. Приостановить процесс:
kill -STOP 4321
  1. Возобновить работу после паузы:
kill -CONT 4321

Завершение процессов по имени

Команда pkill

Позволяет отправлять сигнал нескольким процессам по названию:

pkill -9 firefox

Команда killall

Отправляет сигнал всем процессам с указанным именем:

killall -HUP sshd

Практическое применение сигналов

1) Перезапуск конфигурации без остановки сервиса

Многие демоны (например, sshd, nginx, named) умеют перечитывать свои конфигурации при сигнале:

kill -HUP PID

Это важнейший инструмент администратора — изменение настроек без остановки сервиса.

2) Корректное завершение приложения

kill -15 PID

Используется перед перезагрузкой сервера или при завершении зависших, но важных процессов.

3) Жёсткое убийство зависшего процесса

kill -9 PID

Использовать только если процесс не реагирует на обычное завершение.

4) Остановка и возобновление процесса

Полезно при диагностике:

kill -STOP PID
kill -CONT PID

5) Пользовательские сигналы в скриптах

Администратор может заставить свой скрипт выполнять разные действия при разных сигналах:

trap "echo 'Получен SIGUSR1!'" SIGUSR1
trap "echo 'Завершение...'; exit" SIGTERM

Сигналы и безопасность

  • SIGKILL (9) невозможно перехватить — это гарантированное уничтожение процесса.
  • SIGTERM (15) рекомендуется использовать чаще, так как позволяет процессу корректно завершить работу.
  • SIGHUP помогает безопасно выполнять обновления конфигураций сетевых служб.

Итоги

Сигналы — важная часть управления процессами в Linux.

Администратору необходимо понимать:

  • какие сигналы существуют;
  • чем отличается корректное завершение от принудительного;
  • как перезапускать конфигурации служб без остановки работы;
  • как диагностировать и управлять процессами при помощи kill, pkill, killall;
  • как правильно работать с зависшими или ошибочными процессами.

Сигналы — это инструмент, который позволяет администратору гибко контролировать систему, экономить время и повышать стабильность работы серверов.