![为什么一个被捕获的信号会导致另一个信号重复?](https://linux22.com/image/178253/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%B8%80%E4%B8%AA%E8%A2%AB%E6%8D%95%E8%8E%B7%E7%9A%84%E4%BF%A1%E5%8F%B7%E4%BC%9A%E5%AF%BC%E8%87%B4%E5%8F%A6%E4%B8%80%E4%B8%AA%E4%BF%A1%E5%8F%B7%E9%87%8D%E5%A4%8D%EF%BC%9F.png)
这是我的脚本:
#!/bin/bash
# this is repeat-signal.sh
trap "echo got USR1; wait" USR1
trap "echo got INT" INT
(
kill -s USR1 $$
sleep 100
) &
wait
当我通过输入运行它时./repeat-signal.sh
,它会"got USR1"
按预期打印。然后,当我发送INT
信号(使用 ctrl+c 或kill
从另一个终端使用)时,它会打印两行:
got INT
got USR1
我原以为它只会打印got INT
。
为什么got USR1
我发送INT
信号时会打印出该行?似乎INT
信号以某种方式导致USR1
信号重复。
编辑以澄清:
最后,我的终端看起来像这样:
bash-5.0$ ./repeat-signal.sh
got USR1
^Cgot INT
got USR1
编辑2:
实际上,这似乎发生在 bash 3.2 中,但不是 bash 5.0