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
Примеры:
- Корректное завершение:
kill -15 1234
- Принудительное завершение:
kill -9 1234
- Перезапуск конфигурации демона (очень важно для админов):
kill -HUP 5678
- Приостановить процесс:
kill -STOP 4321
- Возобновить работу после паузы:
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; - как правильно работать с зависшими или ошибочными процессами.
Сигналы — это инструмент, который позволяет администратору гибко контролировать систему, экономить время и повышать стабильность работы серверов.