Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash有等待忽略信号_Bash_Signals - Fatal编程技术网

Bash有等待忽略信号

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"

我试图在shell脚本的后台运行命令,并在脚本末尾等待它们,这样它们就不会孤立。我还想在接收到信号但该信号终止我的
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