为什么带有陷阱的进程被终止而不是从子进程接收 SIGUSR1

为什么带有陷阱的进程被终止而不是从子进程接收 SIGUSR1

我写了一个简单的测试程序,运行良好。

#/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 改变了这种混乱状态。花了一天一夜也没有解决这个简单的问题。我一定是卡在某个地方了,有人可以指出。

相关内容