我有以下脚本:
#!/bin/bash
echo "We are $$"
trap "echo HUP" SIGHUP
cat # wait indefinitely
当我发送SIGHUP
(使用kill -HUP pid
)时,没有任何反应。
如果我稍微更改脚本:
#!/bin/bash
echo "We are $$"
trap "kill -- -$BASHPID" EXIT # add this
trap "echo HUP" SIGHUP
cat # wait indefinitely
...然后脚本在echo HUP
退出时会正确执行操作(当我按Ctrl + C时):
roger@roger-pc:~ $ ./hupper.sh
We are 6233
^CHUP
这是怎么回事?我应该如何SIGHUP
向该脚本发送信号(不一定是)?
完善。有人愿意把它变成答案吗?
—
罗杰·利普斯科姆
我知道它可以这样工作,但是我会让一个比我更有洞察力的人来研究为什么以及为什么要这样做的答案。
—
Kusalananda
我最后使用
—
罗杰·利普斯科姆
while true; do read; done
过,否则输入文本也会使其退出,并且我希望它在Ctrl + C时退出。
cat
过程完成后,将传递信号并执行信号处理程序。尝试使用原始脚本,然后按退出Ctrl+D
该cat
过程。当cat
过程处于前台时,HUP
不会作用信号。再用cat
替换为read
(内置shell)再试一次。