Ответ
-9 — это номер сигнала SIGKILL, используемого для безусловного и немедленного завершения процесса. Это самый жесткий сигнал, который ядро Linux обрабатывает напрямую, не давая процессу возможности как-либо отреагировать (например, корректно закрыть файлы или сетевые соединения).
Синтаксис:
kill -9 <PID>
# Или эквивалентно:
kill -SIGKILL <PID>
Почему SIGKILL — это крайняя мера:
- Нет обработки: Процесс не может перехватить или проигнорировать
SIGKILL. Это нарушает нормальный жизненный цикл приложения. - Риск повреждения данных: Если процесс писал в файл или базу данных, операция может прерваться на полпути.
- Утечки ресурсов: Дескрипторы файлов, сокеты или сегменты разделяемой памяти могут остаться неосвобожденными.
Правильный подход к завершению процессов (на примере проблемного веб-сервера 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.