Ale*_*lls 3 bash signals shell-script trap
在bash
脚本中,是否有一种简单的方法来等待信号,例如:
wait -s SIGINT
Run Code Online (Sandbox Code Playgroud)
管他呢?也许只是trap
?
不。
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
信号,“处理程序”将设置quit
为1
,并且控制将返回给代码,这将退出循环。