2015-10-20 38 views
4

我有一個python腳本,我從操作系統調用冗長的進程。一段時間後,我調用的進程被SIGKILL信號系統終止。如何處理python中的os.system sigkill信號?

是否有可能從Python內部處理這種情況,就像在try和catch情況下一樣?

我應該用什麼方法來解決這個問題。這個過程儘可能不間斷地運行是非常重要的。

回答

7

答案是NO,在任何過程中您都無法處理SIGKILLkill -9 <pid>。只有SIGHUP可以通過shutdownhooks處理,但不能使用SIGKILL或。 SIGKILL是爲了攻擊性的殺死任務而製作的,只適用於內核級別;你的過程不知道殺人事件。

爲了保持長時間運行的過程,您應該編寫一個小的監控程序,不斷檢查進程是否存在;如果發現它被殺死,只需重新啓動該過程。

OR

在下面循環運行的過程中,希望你得到它;)

while true 
    do 
    /your/script 
    sleep 1 
done 
+0

請注意,信號15號通常爲SIGTERM和SIGHUP是正常的信號編號1' - ''kill'命令使用9'和'-15'符號;在系統調用接口中,信號數量很小且爲正值。 –

+0

請注意,上面的腳本是一個shell腳本,運行它像'bash launcher.sh'(假設你保存爲「launcher.sh」)。另外,'/ your/script'這一行假定你的python程序在文件夾「/ your」中的一個名爲「script」的文件中,設置了可執行位(參見'man chmod'),並以'#! /斌/ bash'。或者用'python/your/script.py'替換'/ your/script /'。當然,所有這些工作在Linux上。 – drevicko