在编写python多线程程序时,发现用Ctrl+C无法终止,就算用Ctrl+Z强制当前进程转为后台并使之停止,而实际上并未停止,用ps命令一查还在运行,于是上网上找资料,动手实践,记录分享一下解决办法。原理是:用另外一个进程来接受信号后杀掉执行任务进程。
在你的代码中增加如下类
class Watcher():
def __init__(self):
self.child = os.fork()
if self.child == 0:
return
else:
self.watch()
def watch(self):
try:
os.wait()
except KeyboardInterrupt:
self.kill()
sys.exit()
def kill(self):
try:
os.kill(self.child, signal.SIGKILL)
except OSError:
pass
然后在你的线程启动之前,实例化一个Watcher对象
def main():
init()
Watcher()
start_your_thread1()
start_your_thread2()
start_your_thread3()
之后你就能发现能用Ctrl+C结束你的多线程程序了,而且是彻底结束。