2010-05-21 56 views
3

我有一個進程,其他進程正試圖殺死,如果他們設法做到這一點,我怎麼才能確保進程將再次運行?如果使用sigkill殺死一個進程,我該如何讓它再次運行?

+2

你嘗試過死靈法術嗎? – FrustratedWithFormsDesigner 2010-05-21 14:01:06

+1

[CoreWars](http://www.corewars.org/)! – 2010-05-21 14:01:08

+0

@Marcelo Cantos:太棒了!我以後要檢查一下。 – FrustratedWithFormsDesigner 2010-05-21 14:06:50

回答

4

結賬inittab。尋找重生:)

這一進程將重新啓動 無論何時終止

這是從我自己的inittab文件的例子:

c1:2345:respawn:/sbin/agetty -8 38400 tty1 linux 

c1是一個ID(是是唯一的),2,3,4,5是適用的運行級別,respawn聲明我之前說過的,其餘的是命令。在那裏你可以簡單地添加你的命令,它應該運行良好。

+0

有趣。我沒有想到,我通常只考慮啓動設置。我猜這可能適用於由用戶手動啓動的進程?對於Windows,我想他必須將他的進程編寫成一個自動重啓的Windows進程(我認爲*可能)... – FrustratedWithFormsDesigner 2010-05-21 14:06:01

+0

我也會對在Windows上執行此操作的方式感興趣。編輯:我發現這個:http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/trun_processrestart.html但還沒有測試過。 – nc3b 2010-05-21 14:10:03

+0

我認爲他假設他正在運行WebSphere服務器,但他甚至沒有說這是一個服務器進程。 – FrustratedWithFormsDesigner 2010-05-21 14:27:01

2

信號處理的信號不同。大多數信號到達信號處理器可以處理它的目標處理過程,例如, SIGTERM是kill通常發送的信息。如果使用kill -sigkill(或kill -9,它們是等效的),則信號永遠不會到達該過程;該進程會盡可能以對OS安全的方式被終止(如果它在系統調用中處於忙碌狀態,系統調用結束後會立即終止進程,因爲在內核中運行的線程被終止模式可能會chrash操作系統,如果鎖沒有被釋放等)。

因此,無論程序設計語言如何,一個進程都無法阻止或恢復SIGKILL。

2

某些Linux版本(如Ubuntu)更喜歡/etc/event.d而不是inittab。這是一個類似的概念,但不同的實現。

3

您可以從inittab重新生成,但您幾乎無法控制何時以及如何重新啓動進程 - 您必須編輯inittab以停止重新生成。而且,inittab respawning無法執行任何有關佔用大量CPU或RAM資源的鎖定進程和進程。您也不會注意到您的過程每兩秒鐘重新啓動一次。

您可以使用進程監視守護進程來獲得額外的功能和靈活性。監控守護進程允許您爲過程控制添加任意複雜的行爲。當然,如果你的要求太過分了,你可能不得不編寫自己的守護進程。

最好使用滿足您需求的現有解決方案。

我用Monit已經有了很好的結果。配置語言非常強大,如果需要,你可以做相當複雜的事情。您還可以啓用Web界面,以便您遠程停止,啓動和禁用進程。查看presentation以獲得總覽。

-1

你總是可以拉一個Robin Hood/Friar Tuck的東西,但是現在你可以同時殺死兩個進程。

相關問題