Урок 8: Сигналы — межпроцессное взаимодействие
Сигналы — это легковесный механизм ОС для отправки асинхронных событий процессу. В этом уроке мы изучим жизненный цикл сигнала — отправка, получение, обработка — и поймём, почему SIGKILL опасен для процессов, удерживающих ресурсы GPU.
Сигнал — это похлопывание процесса по плечу: SIGTERM говорит «пожалуйста, завершись сам», SIGKILL говорит «умри сейчас» — во втором случае нет времени на очистку.
- сигнал
- Короткое асинхронное уведомление, отправляемое процессу ядром или другим процессом, чтобы просигнализировать о событии (ошибка, запрос на завершение, прерывание пользователем).
- SIGTERM
- Сигнал 15 — вежливый запрос на завершение, который можно перехватить и обработать, позволяя процессу освободить ресурсы перед выходом.
- SIGKILL
- Сигнал 9 — принудительное завершение, которое нельзя перехватить, заблокировать или проигнорировать; ядро немедленно уничтожает процесс без очистки.
- обработчик сигнала
- Функция, зарегистрированная с помощью signal() или sigaction(), которая вызывается асинхронно при поступлении сигнала. Внутри неё разрешены только async-signal-safe операции.
- sigaction
- Полный POSIX-интерфейс для регистрации обработчиков сигналов, дающий контроль над маской сигналов и дополнительными флагами сверх простого вызова signal().