我正在使用 bash 和信号处理程序,发现了一件有趣的事情。但我无法解释为什么会这样。
例如,我们有一个脚本 test.sh,它可以执行某些操作并可以处理 SIGTERM:
trap 'echo "sig 15 rcvd" ' 15
trap 'echo "sig 10 rcvd" ' 10
while true
do
; do something
sleep 0.2
done
Run Code Online (Sandbox Code Playgroud)
因此,当我向该脚本发送一些信号时:
kill -15 <pidof test.sh>; kill -10 <pidof test.sh>
Run Code Online (Sandbox Code Playgroud)
我收到的信号 10 早于信号 15:
sig 10 rcvd
sig 15 rcvd
Run Code Online (Sandbox Code Playgroud)
如果我发送 2 次信号 10 或 15 脚本仅打印一次:
kill -15 <pidof test.sh>; kill -15 <pidof test.sh>
sig 15 rcvd
Run Code Online (Sandbox Code Playgroud)
这也很奇怪:我认为这是因为我们对同一个 pid 有双重信号,并且只有一个信号会发送给它。或者还有其他一些原因导致这种行为?
最后一件有趣的事情:从脚本中删除睡眠并发送两个信号:
test.sh
trap 'echo "sig 15 rcvd" ' 15
trap 'echo …Run Code Online (Sandbox Code Playgroud)