为什么 shell 不通过kill -s TERM 终止?

为什么 shell 不通过kill -s TERM 终止?
#!/bin/sh

trap 'trap - EXIT; echo exit' EXIT
trap 'echo term; exit' TERM

sleep 100 

如果我运行kill脚本的 shell 进程的 PID,它不会终止。如果我删除 TERM 陷阱并执行相同的操作,shell 将终止。为什么?同样,如果我替换sleep 100sleep 100 & wait,shell 将由 终止kill

答案1

shell 仅在特定检查点(在命令末尾)检查未完成的陷阱,并且当它隐式等待正在运行的命令时,它就在此类检查点之前。

另一方面:如果您不使用trap .... TERM,则该信号将按默认行为使用,即终止进程(甚至是 shell)。

如果使用trap .... TERM,则不再具有 SIGTERM 的默认信号行为,这会阻止 shell 被终止。

相关内容