我有一個python腳本,我從操作系統調用冗長的進程。一段時間後,我調用的進程被SIGKILL信號系統終止。如何處理python中的os.system sigkill信號?
是否有可能從Python內部處理這種情況,就像在try和catch情況下一樣?
我應該用什麼方法來解決這個問題。這個過程儘可能不間斷地運行是非常重要的。
我有一個python腳本,我從操作系統調用冗長的進程。一段時間後,我調用的進程被SIGKILL信號系統終止。如何處理python中的os.system sigkill信號?
是否有可能從Python內部處理這種情況,就像在try和catch情況下一樣?
我應該用什麼方法來解決這個問題。這個過程儘可能不間斷地運行是非常重要的。
There is no way to handle SIGKILL
的信號SIGKILL和SIGSTOP不能被捕獲,阻止或忽略。
如果你正在尋找優雅地處理系統關閉,你應該處理SIGTERM
或啓動/關機腳本,如upstart job或init.d script。
答案是NO,在任何過程中您都無法處理SIGKILL
或kill -9 <pid>
。只有SIGHUP
可以通過shutdownhooks處理,但不能使用SIGKILL
或。 SIGKILL
是爲了攻擊性的殺死任務而製作的,只適用於內核級別;你的過程不知道殺人事件。
爲了保持長時間運行的過程,您應該編寫一個小的監控程序,不斷檢查進程是否存在;如果發現它被殺死,只需重新啓動該過程。
OR
在下面循環運行的過程中,希望你得到它;)
while true
do
/your/script
sleep 1
done
請注意,信號15號通常爲SIGTERM和SIGHUP是正常的信號編號1' - ''kill'命令使用9'和'-15'符號;在系統調用接口中,信號數量很小且爲正值。 –
請注意,上面的腳本是一個shell腳本,運行它像'bash launcher.sh'(假設你保存爲「launcher.sh」)。另外,'/ your/script'這一行假定你的python程序在文件夾「/ your」中的一個名爲「script」的文件中,設置了可執行位(參見'man chmod'),並以'#! /斌/ bash'。或者用'python/your/script.py'替換'/ your/script /'。當然,所有這些工作在Linux上。 – drevicko