子プロセスから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

ただし、本番パイプラインで同じコードパターンを使用すると、親プロセスは終了します。奇妙なことに、最初の数ヶ月間は大規模なシェルスクリプトがうまく実行されましたが、突然親プロセスが終了し始めたことです。どのような変更がこれらの予期しない動作を引き起こしたのか分からない。関係のない他の場所で大きなスクリプトを少し修正しました。このスクリプトは、slurm クラスター環境で使用されます。私はITがこの混乱を変えたことを知っています。この簡単な問題を解決せずに一晩昼夜を過ごしました。私はどこかに閉じ込められなければならず、誰かがそれを指摘することができます。

関連情報