Что означает сигнал -9 (SIGKILL) в Linux?

«Что означает сигнал -9 (SIGKILL) в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

-9 — это номер сигнала SIGKILL, используемого для безусловного и немедленного завершения процесса. Это самый жесткий сигнал, который ядро Linux обрабатывает напрямую, не давая процессу возможности как-либо отреагировать (например, корректно закрыть файлы или сетевые соединения).

Синтаксис:

kill -9 <PID>
# Или эквивалентно:
kill -SIGKILL <PID>

Почему SIGKILL — это крайняя мера:

  1. Нет обработки: Процесс не может перехватить или проигнорировать SIGKILL. Это нарушает нормальный жизненный цикл приложения.
  2. Риск повреждения данных: Если процесс писал в файл или базу данных, операция может прерваться на полпути.
  3. Утечки ресурсов: Дескрипторы файлов, сокеты или сегменты разделяемой памяти могут остаться неосвобожденными.

Правильный подход к завершению процессов (на примере проблемного веб-сервера Nginx):

# 1. Вежливая попытка завершить главный процесс (SIGTERM, сигнал 15)
sudo systemctl stop nginx  # Или: sudo kill -15 <nginx_master_pid>
# Процесс получает сигнал и может корректно завершить рабочие процессы.

# 2. Если процесс не реагирует (завис), даем ему время на graceful shutdown
sleep 10

# 3. Только если процесс все еще жив, применяем SIGKILL
if ps -p <nginx_master_pid> > /dev/null; then
  echo "Процесс не ответил на SIGTERM, принудительно завершаем."
  sudo kill -9 <nginx_master_pid>
fi

В сценариях оркестрации (Kubernetes, Docker) и systemd для graceful shutdown также сначала используется SIGTERM, и только после таймаута — SIGKILL.