Сигналы в Linux – это способ асинхронного уведомления процессу о произошедших событиях.
Основные стандартные сигналы:
- SIGINT (2): Прерывание с клавиатуры (Ctrl+C).
- SIGQUIT (3): Выход из программы с генерированием дампа памяти (Ctrl+\).
- SIGKILL (9): Принудительное завершение процесса, которое невозможно перехватить или проигнорировать.
- SIGTERM (15): Запрос на завершение процесса, который может быть перехвачен для выполнения очистки.
- SIGHUP (1): Сигнал "hang up", обычно посылается при разрыве соединения или завершении управляющего терминала.
- SIGSEGV (11): Ошибка обращения к недействительной области памяти (segmentation fault).
- SIGFPE (8): Ошибка плавающей точки (например, деление на ноль).
- SIGBUS (10): Ошибка доступа к физической памяти.
- SIGCHLD (17): Уведомление родителю о завершении или остановке дочернего процесса.
- SIGSTOP (19): Остановка процесса (не может быть перехвачен или проигнорирован).
- SIGTSTP (20): Остановка процесса с терминала (Ctrl+Z, может быть перехвачен).
- SIGCONT (18): Продолжение выполнения остановленного процесса.
Помимо стандартных сигналов POSIX, существуют и другие, специфичные для Linux или различных архитектур. Список и номера сигналов могут различаться.
Обработка сигналов в Python осуществляется с помощью модуля signal:
python
Процесс может:
- Игнорировать сигнал (за исключением SIGKILL и SIGSTOP).
- Выполнить действие по умолчанию (для большинства сигналов это завершение процесса).
- Выполнить зарегистрированную функцию-обработчик.