Ответ
Да, в Linux существуют два сигнала, которые невозможно перехватить, заблокировать или проигнорировать пользовательским обработчиком:
SIGKILL(сигнал 9): Немедленное безусловное завершение процесса. Ядро останавливает процесс, не давая ему возможности выполнить какую-либо cleanup-логику.SIGSTOP(сигнал 19): Немедленная безусловная приостановка (останов) выполнения процесса. Процесс переводится в состояниеTASK_STOPPEDи может быть продолжен сигналомSIGCONT.
Практическое значение для DevOps и администрирования:
SIGKILL— последнее средство. В скриптах и оркестраторах (Kubernetes, systemd) сначала отправляетсяSIGTERM(15), чтобы приложение корректно завершилось. Если процесс не отвечает в течение таймаута (например,terminationGracePeriodSecondsв Kubernetes), тогда отправляетсяSIGKILL.- Пример в скрипте: Попытка перехватить
SIGKILLбесполезна.#!/bin/bash # Этот обработчик никогда не сработает для SIGKILL trap "echo 'Завершаю работу чисто'" EXIT TERM INT echo "PID: $$"; sleep 100Вызов
kill -9 $$завершит скрипт мгновенно, сообщение не выведется. SIGSTOP/SIGCONTдля отладки. Эти сигналы можно использовать для приостановки фонового процесса, чтобы исследовать состояние системы (открытые файлы, использование памяти), а затем возобновить его работу.
Важно: Все остальные сигналы (TERM, INT, HUP и т.д.) могут быть перехвачены или проигнорированы процессом, что необходимо учитывать при написании скриптов развертывания и управления сервисами.