2010-10-11 162 views
16

我有一個要求,如接收任何終止命令如SIGTERM和SIGKILL寫入日誌文件。SIGKILL信號處理程序

我可以註冊SIGTERM,但如何處理SIGKILL信號?

+0

建議閱讀:[嘗試處理SIGKILL](http://stackoverflow.com/questions/3689403/how-do-i-send-窗口上的信號到窗口) – 2010-10-11 18:10:56

+1

[如何正常處理SIGKILL信號]的可能重複(http://stackoverflow.com/questions/2541597/how-to-gracefully-handle-the-sigkill-信號在爪哇) – 2010-10-11 18:13:37

+0

@本Voigt:我很猶豫要將此標記爲「如何正常處理SIGKILL信號」的副本,因爲該問題包含錯誤信息,表明Control-C實際上發送了KILL信號發送一個INTR信號。 – Omnifarious 2010-10-11 20:12:53

回答

21

你不能,至少不能殺死進程。

可以做的是安排父進程監視子進程的死亡,並採取相應的行動。任何像樣的過程監督系統,如daemontools,都內置了這樣的設備。

+0

使用父進程是最簡單的,但不是必需的。保持管道或FIFO的另一端的任何進程都會在其對等體被終止時得到通知。 – 2010-10-11 18:12:01

+0

@Ben:管道可以通過除死亡之外的其他方式關閉,所以不太可靠。但是,如果您不控制父流程,那可能是您擁有的唯一選擇。 (daemontools有一個'fghack'程序在這個前提下工作。) – 2010-10-11 18:24:24