Bash有等待忽略信号
我试图在shell脚本的后台运行命令,并在脚本末尾等待它们,这样它们就不会孤立。我还想在接收到信号但该信号终止我的Bash有等待忽略信号,bash,signals,Bash,Signals,我试图在shell脚本的后台运行命令,并在脚本末尾等待它们,这样它们就不会孤立。我还想在接收到信号但该信号终止我的wait并结束脚本时调用函数。如何让wait忽略信号并保持waiting?例如: #!/bin/bash num=0 sigHandle() { if [[ $num -eq 0 ]]; then echo "trapped" ((num++)) else echo "Already called trap"
wait
并结束脚本时调用函数。如何让wait
忽略信号并保持wait
ing?例如:
#!/bin/bash
num=0
sigHandle()
{
if [[ $num -eq 0 ]]; then
echo "trapped"
((num++))
else
echo "Already called trap"
fi
}
trap 'sigHandle' SIGUSR1
sleep 12345 &
wait
我试着把我的陷阱改成trap'sigHandle;等待'SIGUSR1
,但是在第一次之后,我的信号处理函数没有被调用。这是可行的,但不确定这样做是否正确
while :; do
wait
done
在循环中调用
wait
,如果wait
以状态158退出(表示它被SIGUSR1
中断),则继续:
一般来说,任何大于128的状态都表示
等待
被接收到的信号(该信号为状态的低8位)中断。您可能希望以不同的方式处理不同的信号,但这为您提供了决定是否继续等待sleep
完成的框架。SIGUSR1是nr 10,因此138,否?用于SIGUSR1
的实际数字取决于平台。Linux是10,Mac OS X是30。
sigusr1_no=30 # Mac OS X
# sigusr1_no=10 # Linux
trap 'sigHandle' SIGUSR1
sleep 12345 &
while :; do
wait
status=$?
if [[ $status = $((sigusr1_no + 128)) ]]; then
echo "USR1 handled, continuing"
continue
else
break
fi
done