我写了一个简单的测试程序,运行良好。
#/bin/bash
run_ajob() {
# sometime the job is short to send a signal to parent
if [ "$job" = "short" ]; then # this is a pseudo code different kinds of job, the elaborate code is much longer
kill -s SIGUSR1 $parent
fi
}
# parent process for job control
shortjob=F
export parent=$$
echo $shortjob in parent $parent
trap "{ echo 'got mouse'; shortjob=T; }" SIGUSR1
run_ajob&
sleep 5 # add this line to prevent the parent process from terminate too soon
echo $shortjob
# output from the program
F in parent 22755
got mouse
T
然而,当在我的生产管道中使用相同的代码模式时,会导致父进程被终止。奇怪的是,最初几个月,大型 shell 脚本运行良好,但突然它开始杀死父进程。不确定是什么变化导致了这种意外行为;我在其他不相关的地方对大脚本做了一些小修改。该脚本用于slurm集群环境。我知道 IT 改变了这种混乱状态。花了一天一夜也没有解决这个简单的问题。我一定是卡在某个地方了,有人可以指出。