Ответ
Сигнал SIGKILL (код 9) — это сигнал безусловного завершения процесса. Его следует использовать только в крайних случаях, когда процесс игнорирует корректные запросы на завершение.
Правильная последовательность завершения процесса:
- SIGTERM (15): Вежливый запрос на завершение. Процесс получает уведомление и может выполнить процедуры очистки (закрыть файлы, завершить сетевые соединения, сохранить состояние). Это стандартный сигнал для
killиsystemctl stop. - SIGINT (2): Аналогичен нажатию Ctrl+C. Часто обрабатывается приложениями для graceful shutdown.
- SIGKILL (9): Применяется, если процесс не завершился после SIGTERM в течение заданного таймаута.
Конкретные сценарии для SIGKILL:
- Процесс "завис" и не реагирует на другие сигналы.
- Критическая ситуация, когда процесс потребляет все ресурсы и его нужно остановить немедленно.
- В скриптах оркестрации или systemd unit files, где после
TimeoutStopSecиспользуетсяSendSIGKILL=yes.
Пример с таймаутом (в скрипте или вручную):
# Отправляем SIGTERM
kill -15 <PID>
# Ждём 30 секунд
sleep 30
# Проверяем, жив ли процесс. Если да — отправляем SIGKILL
if kill -0 <PID> 2>/dev/null; then
echo "Процесс не ответил на SIGTERM, отправляем SIGKILL"
kill -9 <PID>
fi
Важные предостережения:
SIGKILLнельзя перехватить или проигнорировать процессом. Ядро завершает процесс немедленно.- Это может привести к утечкам ресурсов (незакрытые файловые дескрипторы, сокеты), повреждению данных (если процесс писал в файл) или нарушению целостности (незавершённые транзакции в БД).
- В production-средах перед
kill -9всегда стоит проверить логи процесса и состояние дисковых операций (командаiostatилиiotop), чтобы понять причину зависания.