小编nea*_*lon的帖子

[Bash]:处理许多信号

我正在使用 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)

linux bash shell signals

5
推荐指数
1
解决办法
391
查看次数

标签 统计

bash ×1

linux ×1

shell ×1

signals ×1