bash陷阱不适用于SIGTERM或SIGKILL

问题描述 投票:0回答:1

我有这个:

  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时,使用

kill <pid>

要么

kill -9 <pid>

在第一种情况下,没有任何反应。这个过程依然存在。在使用-9的第二种情况下,进程终止,但不调用该陷阱。所以杀戮命令都没有做我想要的!我希望进程退出,但我需要先捕获陷阱。有谁知道为什么会这样?

bash pid kill bash-trap
1个回答
2
投票

正如您所发现的,有两个信号无法捕获,阻止或忽略。他们是SIGKILLSIGSTOP。描述限制的参考文献是man 7 signal。它用明确的术语拼写出来:

The signals SIGKILL and SIGSTOP cannot be caught, blocked, or
ignored.

该限制适用于bash trap内置。

© www.soinside.com 2019 - 2024. All rights reserved.