我有这个:
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的第二种情况下,进程终止,但不调用该陷阱。所以杀戮命令都没有做我想要的!我希望进程退出,但我需要先捕获陷阱。有谁知道为什么会这样?
答案 0 :(得分:2)
正如您所发现的,有两个信号无法捕获,阻止或忽略。它们是SIGKILL
和SIGSTOP
。描述限制的参考是man 7 signal。它以明确的术语阐明:
The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.
该限制适用于bash trap
内置。