2

我正在为多进程 UDP 服务器编写测试工具。测试工具运行多个子进程——包括几个产生 UDP 服务器实例的子进程。我在退出时终止子进程和从内部退出程序都遇到了麻烦——唯一有效的是终端的 CTRL+C,它会杀死子进程并很好地停止程序。

我有几个相关的问题:

  1. sys.exit()如果我在信号处理程序中或在我触发信号后使用 ,程序不会退出。看起来它遇到了退出代码,然后挂起。
  2. 如果我使用p.terminate()os.kill(p, SIGINT
  3. 如果我使用该程序不会终止子进程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)
4

0 回答 0