2012-05-15 20 views
0

我有兩個服務在Linux中運行,稱它們爲AB。每個都依賴於另一個,所以如果一個崩潰並重新啓動,另一個必須立即重新啓動。如何監控在Linux中運行的兩個服務,並在一次崩潰後重新啓動它們

我已經編寫了一個監視器程序來分別啓動和監視兩個服務,並且程序可以在崩潰時重新啓動一個服務。

我想改進監控程序,以便當它發現一個服務崩潰時,它會得到其他服務的PID並殺死它。

回答

1

顯示器過程中會使用fork(2),對產卵兩個孩子?如果是這樣,父母將取回孩子的PID,它可以保存在每個孩子的變量中。

生成這兩個進程後,父監視器可以坐在一個循環中,等待waitpid(2)調用。使用正確的選項,該呼叫可以阻止,直到其中一個孩子終止,於是你找回孩子的PID以及其退出狀態。基於此,您可以在另一個孩子上執行kill(2),並重新執行叉序列以產生兩個孩子的新實例。

請注意,殺死第二個孩子後,您的下一個waitpid調用將返回該PID的PID,而不是新的一對兒童中的一個。因此,您需要檢查返回的PID與這兩個您目前的孩子,並忽略它,如果它不匹配。

相關問題