В чем разница между SIGKILL и SIGTERM?

«В чем разница между SIGKILL и SIGTERM?» — вопрос из категории Linux, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

SIGTERM и SIGKILL — это сигналы для завершения процессов в Linux, но с принципиально разным поведением.

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

Когда использовать:

  1. Всегда начинайте с SIGTERM, чтобы дать приложению шанс завершиться правильно.
  2. Используйте SIGKILL только если процесс не реагирует на SIGTERM (завис).

Пример в терминале:

# Отправить SIGTERM процессу с PID 1234 (по умолчанию для команды kill)
kill 1234

# Принудительно завершить процесс с PID 1234 с помощью SIGKILL
kill -9 1234
# или
kill -SIGKILL 1234

В сценариях DevOps (например, в скриптах развертывания или оркестрации) важно сначала использовать SIGTERM с таймаутом, и только затем SIGKILL, чтобы обеспечить отказоустойчивость и целостность данных.