비슷한 질문이 이미 SOF에서 요청 된 것 같습니다. 그러나, 나는 정말로 나의 특별한 경우를위한 적절한 해결책을 찾을 수 없었다. SIGTERM이 수신 될 때까지 실행중인 스레드를 열어 계속 실행하는 데몬을 만들려고합니다. SIGTERM을 받으면 상위 스레드가 모든 작업자 스레드를 종료하고 전체 프로세스가 중지됩니다. 이것은 내 코드와 같은 모습입니다 :스레드가 시작된 후 신호 처리기가 작동하지 않습니다.
from lib.threadrunner import ThreadRunner
import signal
import time
def sigint_handler(signum, frame):
print 'Stop pressing the CTRL+C!'
signal.signal(signal.SIGINT, sigint_handler)
objectToRun = ClassToRun(cfg)
time.sleep(3)
# The below code uses threading module to create 3 threads
threadRunner = ThreadRunner()
threadRunner.load('Task Name', objectToRun)
threadRunner.start(3)
threadRunner.joinAll()
나는 모든 스레드가 시작 후 SIGINT를 보내 Ctrl + C
충돌하는 경우가의 sigint_handler
기능이 트리거하지 않고, 아무것도 인쇄되지 가져옵니다 원인이된다. 그러나 스레드가 시작되기 전에 (내가 3 초의 수면 시간을 추가하는 동안) Ctrl + C
을 칠 수 있다면 Stop pressing the CTRL+C!
이 인쇄 된 것을 볼 수 있습니다. 왜 이런 식으로 행동하는지, 어떻게 해결할 지 모르겠다.
추신 : threadRunner
클래스의 코드가 필요하면 그 코드도 제공합니다.