等待信号

Ale*_*lls 3 bash signals shell-script trap

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

wait -s SIGINT
Run Code Online (Sandbox Code Playgroud)

管他呢?也许只是trap

Kus*_*nda 6

不。

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
Run Code Online (Sandbox Code Playgroud)

做一种“等待信号到达”循环。

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