![하위 프로세스로부터 SIGUSR1을 수신하는 대신 트랩이 있는 프로세스가 종료되는 이유](https://linux55.com/image/144349/%ED%95%98%EC%9C%84%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%A1%9C%EB%B6%80%ED%84%B0%20SIGUSR1%EC%9D%84%20%EC%88%98%EC%8B%A0%ED%95%98%EB%8A%94%20%EB%8C%80%EC%8B%A0%20%ED%8A%B8%EB%9E%A9%EC%9D%B4%20%EC%9E%88%EB%8A%94%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EA%B0%80%20%EC%A2%85%EB%A3%8C%EB%90%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0.png)
간단한 테스트 프로그램을 작성했는데 잘 작동합니다.
#/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가 이러한 혼란을 변화시켰다는 것을 알고 있습니다. 이 간단한 문제를 해결하지 못한 채 하루 밤낮을 보냈습니다. 나는 어딘가에 갇혀 있어야하며 누군가가 그것을 지적 할 수 있습니다.