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 встроенный.

Другие вопросы по тегам