bash trap не работает для SIGTERM или SIGKILL
У меня есть это:
trap on_ql_trap EXIT;
trap on_ql_trap INT;
trap on_ql_trap TERM;
echo "pid that called trap: $$"
который, вероятно, может быть превращен в стенографию:
trap on_ql_trap EXIT INT TERM;
echo "pid that called trap: $$"
когда я убиваю процесс / pid, который называется trap, используя
kill <pid>
или же
kill -9 <pid>
в первом случае ничего не происходит. Процесс живет. Во втором случае, используя -9, процесс умирает, но ловушка не вызывается. Так что ни одна из команд kill не делает то, что я хочу! Я хочу, чтобы процесс завершился, но мне нужно сначала отловить ловушку. Кто-нибудь знает, почему это может быть?
1 ответ
Как вы обнаружили, есть два сигнала, которые нельзя поймать, заблокировать или игнорировать. Они есть SIGKILL
а также SIGSTOP
, Ссылка, описывающая ограничение, является сигналом человека 7. Это прописано в недвусмысленных терминах:
The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.
Это ограничение относится к Bash trap
встроенный.