하위 프로세스에서 Ctrl-C를 사용하여 상위 프로세스에서 작업을 수행할 수 있나요?

하위 프로세스에서 Ctrl-C를 사용하여 상위 프로세스에서 작업을 수행할 수 있나요?

나는 등을 memcache사용하고 웹 프레임워크를 기반으로 하는 웹 애플리케이션을 개발 중입니다. 콘솔 출력을 보거나 필요한 경우 디버거에 들어갈 수 있도록 포그라운드에 있어야 합니다.mongodbpythonpython

현재 나는 하나를 가지고 있습니다start.sh

memcache_start
mongodb_start
python fg

그리고stop.sh

memcache_stop
mongodb_stop

스크립트는 모든 것을 자동화할 수 있습니다.

pythonCtrl일반적으로 fg 에서 -kill을 사용합니다 . 이제 시스템을 정상적으로 종료하려면 C이를 python명시적으로 실행해야 합니다 .stop.sh

start.sh가 논리적으로 실행되어야 하는 다음 연속 작업이기 때문에 stop 명령을 실행할 수도 있다는 것을 Ctrl알 수 있습니까 ?C SIGINT

답변1

Python을 실행하기 전에 SIGINT를 무시하고 기본 동작을 복원 trap ' ' INT하도록 쉘에 지시하는 데 사용합니다.trap - INT

memcache_start
mongodb_start
trap ' ' INT
python fg
trap - INT
memcache_stop
mongodb_stop

trap ' ' INT줄 다음에는 쉘이 SIGINT를 무시하도록 지시하지만 python이에 영향을 받지 않습니다. 따라서 Ctrl+ 를 클릭하면 정상적으로 종료 C되지만 python셸은 스크립트의 나머지 정리 명령을 계속 실행합니다. 두 번째 명령 trap - INT은 꼭 필요한 것은 아니며 Ctrl+를 다시 사용하여 C청소 프로세스를 중지할 수 있습니다. 즉, SIGINT를 에 보내면 memcache_stop쉘은 실행을 시도하지 않고 mongodb_stop단순히 종료됩니다.

여기자세한 기사에서는 쉘이 SIGINT/SIGQUIT를 처리하는 방법을 설명합니다.

관련 정보