하위 프로세스로부터 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가 이러한 혼란을 변화시켰다는 것을 알고 있습니다. 이 간단한 문제를 해결하지 못한 채 하루 밤낮을 보냈습니다. 나는 어딘가에 갇혀 있어야하며 누군가가 그것을 지적 할 수 있습니다.

관련 정보