在集群上提交的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