2015-06-23 120 views
3

我对在Python应用程序中安装退出处理程序的许多不同方式有点困惑。有atexit.register()signal.signal(SIG, handler),但我不确定哪一个是我的情况下使用的权利。Python退出处理程序

我有一个从命令行启动的主进程,它产生许多其他子进程作为守护进程。然后它会等待,直到完成。子进程运行一个无限循环(可以通过一个标志突破,但不知道如何触发该标志)。当主进程通过CTRL + C关闭或接收到kill信号时,我想在子进程中调用一些清理代码。

给出2个退出处理程序方法(或者可能还有更多),实现此目的的最佳方式是什么?

回答

1

atexit文档:

从而注册在正常终止解释器自动执行功能。

注意:当所述程序由不Python处理的信号,检测一个Python致命内部错误时,或者当OS杀死不叫从这个模块中注册的功能。 _exit()被调用。

所以如果你想对信号作出反应,请使用signal.signal

+0

它会工作到信号挂钩中的'sys.exit()'并将cleaup留给'atexit'吗?这不应该满足所有情况(正常退出和强制退出)吗?我怎样才能抓住'SIGKILL'(如果有的话)? – orange

相关问题