스크립트로 시작된 프로세스가 SIGINT를 수신하지 못했습니다.

스크립트로 시작된 프로세스가 SIGINT를 수신하지 못했습니다.

Ubuntu 16.04.5 LTS(AWS)를 사용하고 있습니다.

다음 명령을 사용하여 Python 프로세스를 만들고 있습니다. nohup python -u main.py > nohup.out 2>&1 &

ctrl-c/SIGINT를 프로세스에 보내고 싶어서 kill -2 <pid>.

터미널에서 프로세스를 시작하면 제대로 작동하고 프로그램이 키보드 인터럽트를 수신하고 정상적으로 닫힙니다.

.sh스크립트나 다른 bash 프로세스(예:)를 통해 프로세스를 시작할 때 bash -c 'nohup python -u main.py > nohup.out 2>&1 &'. (두 방법 모두 동일한 방식으로 프로세스를 시작한다고 생각합니다.) 프로세스를 보낼 때 프로세스가 SIGINT를 수신하지 않습니다.

SIGTERM(기본값 kill)은 제대로 작동하고 프로세스를 종료하지만 프로세스가 정상적으로 종료되도록 허용하지는 않지만 필요합니다.

무슨 일이에요?

답변1

아니요, 그들은 다르게 시작합니다. Bash는 작업 제어가 꺼진 상태에서 스크립트를 실행하므로 명령의 백그라운드 모드는 다음으로 끝납니다.& 스크립트에서SIGINT 및 SIGQUIT를 무시하고 입력을 /dev/null.

날 봐답변여기(이를 설명하는 표준 참조).

귀하의 경우 이는 "정상적인" 종료를 수행 main.py하도록 설정된 핸들러가 없지만 Control-C에 의해 강제로 종료되거나 대화형 셸에서 실행될 때 단순히 종료된다는 의미이기도 합니다. 핸들러를 설정하는 경우 해당 핸들러는 스크립트에서 실행될 때 상위 쉘의 설정 처리도 무시합니다.SIGINTkill -2SIG_IGNSIGINT

관련 정보