0
我认为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()
如果我打Ctrl + C
所有线程都开始之后发送SIGINT,该sigint_handler
功能不会被触发,导致没有被打印出来。但是,如果在线程启动之前(在3秒的睡眠时间内)我可以打到Ctrl + C
,我确实看到了Stop pressing the CTRL+C!
打印。我不知道为什么这是这样的行为,我可以如何解决这个问题。 PS:如果你需要threadRunner
类的代码,我会提供这个。