等待信号

等待信号

bash脚本中,是否有一种简单的方法来等待信号,例如:

wait -s SIGINT

管他呢?也许只是trap

答案1

不。

wait专门用于父进程等待子进程的终止(并访问其退出状态)。

此外,没有任何进程可以捕获KILL信号(用作示例的原始问题KILL)。

另外,“等待信号”是一件不寻常的事情,因为信号是异步事件,这意味着您不需要等待对于它们,而是安装一个信号处理程序(trap在 shell 中使用)来处理信号每当它到达了。信号可能在脚本执行期间的任何时间到达,并且信号处理程序将在发生这种情况时执行(在处理信号时,正常的程序流程将暂时暂停)。

显然,你可以做类似的事情

trap 'quit=1' USR1

quit=0
while [ "$quit" -ne 1 ]; do
    printf 'Do "kill -USR1 %d" to exit this loop after the sleep\n' "$$"
    sleep 1
done

echo The USR1 signal has now been caught and handled

执行某种“等待信号到达”循环。

在这里,“陷阱”将“捕获”信号USR1,“处理程序”将设置quit1,控制权将返回到代码,从而退出循环。

相关内容