我有一個進程將在另一個jvm中創建一個java進程。他們留在同一臺機器上。什麼是監控java進程的快速可靠的方法?
我的理解是兩個進程在不同的機器上運行,通常可以通過故障檢測器完成。但目前它只是產生另一個進程(使用Runtime.getRuntime())並將必要的參數傳遞給子進程。我能想到的是執行系統命令,例如jps ...
或ps -ef | grep ...
什麼是 更好?檢測一個java進程是否與監視它的進程位於同一臺機器上時崩潰?
我有一個進程將在另一個jvm中創建一個java進程。他們留在同一臺機器上。什麼是監控java進程的快速可靠的方法?
我的理解是兩個進程在不同的機器上運行,通常可以通過故障檢測器完成。但目前它只是產生另一個進程(使用Runtime.getRuntime())並將必要的參數傳遞給子進程。我能想到的是執行系統命令,例如jps ...
或ps -ef | grep ...
什麼是 更好?檢測一個java進程是否與監視它的進程位於同一臺機器上時崩潰?
Runtime.exec
方法返回Process
。您可以通過此實例控制流程:您可以終止它(destroy
),等待其終止(waitFor
),並在終止時獲取其錯誤代碼(exitValue
)。
根據你想要做什麼,過程對象可能工作。
如果你想了解更多信息,我建議在它們之間打開一個套接字連接。這樣你可以隨時獲得更詳細的狀態。
我以前做過這件事,它可以用幾個令人難以置信的小班來完成。只需發送和接收兩端的文本行。
我會使用監視pid的盒子上運行的腳本,如果它崩潰則表示父進程啓動新的子進程。通過信號或通過聽音管/本地插座。
我也使用開放套接字技術進行同機IPC監控,但您不一定需要通過連接發送或接收任何數據。如果進程死亡,則主機操作系統上的TCP/IP堆棧將終止該進程已打開的所有連接,以便快速通知對等失敗。當然如果你想在運行過程中關注進程的狀態,那麼可以在那裏使用send/recv。 – 2011-04-06 17:31:37