Ответ
SIGTERM и SIGKILL — это сигналы для завершения процессов в Linux, но с принципиально разным поведением.
- SIGTERM (сигнал 15) — это "вежливый" запрос на завершение. Процесс получает уведомление и может выполнить корректное завершение:
- Освободить ресурсы (закрыть файлы, сетевые соединения).
- Сохранить состояние или данные.
- Выполнить собственный обработчик сигнала для graceful shutdown.
- Проигнорировать сигнал, если обработчик не установлен.
- SIGKILL (сигнал 9) — это немедленное и безусловное "убийство" процесса. Ядро ОС принудительно завершает процесс, не давая ему возможности выполнить какую-либо очистку. Этот сигнал нельзя перехватить или проигнорировать.
Когда использовать:
- Всегда начинайте с
SIGTERM, чтобы дать приложению шанс завершиться правильно. - Используйте
SIGKILLтолько если процесс не реагирует наSIGTERM(завис).
Пример в терминале:
# Отправить SIGTERM процессу с PID 1234 (по умолчанию для команды kill)
kill 1234
# Принудительно завершить процесс с PID 1234 с помощью SIGKILL
kill -9 1234
# или
kill -SIGKILL 1234
В сценариях DevOps (например, в скриптах развертывания или оркестрации) важно сначала использовать SIGTERM с таймаутом, и только затем SIGKILL, чтобы обеспечить отказоустойчивость и целостность данных.