내가 정기적으로 외부 명령을 호출하는 파이썬 프로그램을 만드는 오전에 신호를 무시. 외부 명령을 수행하려면 몇 초가 걸릴 수 있습니다 ( 초). I 심하게 SIGINT하는 신호 처리기를 추가하여 종단 외부 명령의 가능성을 저감 할. 기본적으로 SIGINT는 Python 프로그램을 종료하기 전에 명령이 실행될 때까지 기다리려고합니다. 문제는 외부 perogram이 가 갑자기 종료의 원인뿐만 아니라, SIGINT를 받고있는 것으로 보인다는 것이다. 나는 신호에 대한 파이썬 문서는 메인 스레드가 http://docs.python.org/2/library/signal.html에 따라 신호를 수신하는 언급 때문에 외부 스레드를 사용하여 명령을 호출하고 있습니다. 누군가 도와 드릴 수 있습니까? 여기 내 코드의 스텁이 있습니다. 외부 프로그램입니다/빈/잠을 상상해파이썬 : 백그라운드 프로세스
import sys
import time
import threading
import signal
def sleep():
import subprocess
global sleeping
cmd = ['/bin/sleep', '10000']
sleeping = True
p = subprocess.Popen(cmd)
p.wait()
sleeping = False
def sigint_handler(signum, frame):
if sleeping:
print 'busy, will terminate shortly'
while(sleeping): time.sleep(0.5)
sys.exit(0)
else:
print 'clean exit'
sys.exit(0)
sleeping = False
signal.signal(signal.SIGINT, sigint_handler)
while(1):
t1 = threading.Thread(target=sleep)
t1.start()
time.sleep(500)
예상되는 동작 (10000 - N) 대기 그 프로그램이 시작 누르면 Ctrl + C N 초 후 될 것입니다 초 후 종료. 무슨 일이 일어나고있는 지 프로그램이 즉시 종료됩니다.
감사합니다.
감사 isedev! 지연된 응답으로 미안합니다. 다른 작업이 우선합니다. 솔루션이 제대로 작동하는 것처럼 보이지만, 어떤 이유로 든 스폰 된 프로세스가 여전히 신호를 수신하고 있습니다. 내 업데이트 된 메인 루프는 게시 한 것과 동일합니다. 내가 간과하고있는 Python 특정 복잡성이있을 수 있습니까? – user3349102