2015-06-23 168 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

相關問題