我正在为多进程UDP服务器编写测试工具。测试工具运行多个子进程 - 包括几个生成UDP服务器实例的子进程。我无法在退出时终止子进程并从内部退出程序 - 唯一有效的是来自终端的CTRL + C,它会杀死子进程并很好地停止程序。
我有几个相关的问题:
sys.exit()
,程序不会退出。它看起来像是命中退出代码,然后挂起。p.terminate()
或os.kill(p, SIGINT
os._quit()
同样,如果我只是让程序继续运行并从终端类型CTRL + C,程序立即停止,带有所有子进程。在程序中执行此操作的最佳方法是什么?
我在节目结束时尝试了什么
os.kill(os.getpid(), signal.SIGINT)
信号处理程序
# handle ctrl+c and remove open files
def signal_handler(signal, frame):
print 'You pressed Ctrl+C!'
# remove all files
try:
filelist = [ f for f in os.listdir(tmpdir) ]
for f in filelist: os.remove(tmpdir+'/'+f)
# remove dir
os.rmdir(tmpdir)
except:
print "unable to remove temporary directory/files:", tmpdir
print "attempt sys.exit()"
sys.exit() # This doesn't do anything, program hangs
# os._exit(0) # This stops program, but doesn't kill subprocesses
signal.signal(signal.SIGINT, signal_handler)