Короткий ответ
SIGTERM (15) — «вежливый» запрос на завершение, который процесс может перехватить и корректно освободить ресурсы перед выходом; SIGKILL (9) — немедленное принудительное завершение на уровне ядра, которое процесс не может перехватить или проигнорировать.
Как это работает подробнее
SIGTERM доставляется в обработчик сигналов приложения (если он есть), давая время закрыть соединения, сохранить состояние и выйти; SIGKILL обрабатывается самим ядром — оно сразу снимает процесс с выполнения без шанса что-либо доделать.
Пример кода
commands.sh
kill -TERM 4321 # мягкое завершение
sleep 10
kill -0 4321 && kill -KILL 4321 # если процесс ещё жив — добиваемЧто использовать на практике
- Практика. всегда сначала посылают SIGTERM и ждут graceful shutdown в течение разумного тайм-аута, и только если процесс не завершился — посылают SIGKILL; именно так по умолчанию поступают systemd и большинство оркестраторов контейнеров.
Подводные камни
- Риск. Частая ошибка — сразу использовать kill -9 «для надёжности»: это не даёт приложению закрыть файлы, зафиксировать транзакции в БД или корректно отдать соединения с баланса, что может привести к повреждению данных.