Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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_Unix_Signals_Mpi_Cluster Computing - Fatal编程技术网

在集群上提交的bash脚本中转发信号

在集群上提交的bash脚本中转发信号,bash,unix,signals,mpi,cluster-computing,Bash,Unix,Signals,Mpi,Cluster Computing,我在集群上提交了一个launch.sh脚本 bsub $settings < launch.sh 其中process.sh调用两个二进制文件(作为示例)作为 我的问题如下: 集群已经将SIGUSR1(大约在SIGTERM之前10分钟)发送到进程(我认为这是运行我的launch.sh脚本的bashshell) 此时,我在launch.sh脚本中捕捉到这个信号,并调用一些信号处理程序。问题是,此信号处理程序仅在运行命令完成后(例如,可能是mpirun process.sh或/start.sh

我在集群上提交了一个
launch.sh
脚本

bsub $settings < launch.sh
其中process.sh调用两个二进制文件(作为示例)作为

我的问题如下: 集群已经将SIGUSR1(大约在SIGTERM之前10分钟)发送到进程(我认为这是运行我的
launch.sh
脚本的
bash
shell)

此时,我在
launch.sh
脚本中捕捉到这个信号,并调用一些信号处理程序。问题是,此信号处理程序仅在运行命令完成后(例如,可能是
mpirun process.sh
/start.sh
)才会执行(至少我所知道的情况下)

如何转发这些信号以使命令/二进制文件正常退出。例如,转发到
process.sh
mpirun
,正如我所经历的,已经以某种方式转发了这些接收到的信号(它是如何做到的?) 转发信号的正确方式是什么(例如也发送到二进制文件
二进制文件A、二进制文件B
? 我不知道该怎么做?让命令在后台执行,创建一个子进程

感谢您的一些启示:-)

来自bash手册,网址:

如果Bash正在等待命令完成并接收到已设置陷阱的信号,在命令完成之前,陷阱将不会执行。当Bash正在通过wait builtin等待异步命令时,接收到已设置陷阱的信号将导致wait builtin返回immedia退出状态大于128的陷阱,紧接着执行陷阱

因此,解决方案似乎将命令放在后台并使用“wait”:

function trap_with_arg() {
    func="$1" ; shift
    for sig ; do
        echo "$ES Installing trap for signal $sig"
        trap "$func $sig" "$sig"
    done
}
function signalHandler() {
    # do stuff depending in what stage the script is
}

# Setup the Trap
trap_with_arg signalHandler SIGINT SIGTERM SIGUSR1 SIGUSR2 

./start.sh
mpirun process.sh
./end.sh
./binaryA 
./binaryB
something &
wait