2011-12-13 32 views
0

我正在寫一個程序,它監視Java應用程序。我想監視本地進程的狀態並知道它們何時退出。這可以; Java給了我Process對象,我可以waitFor()。Java本機過程庫

然而,這產生的問題是,如果我的程序死掉,我想它來獲得參考流程回來 - 它不能用Java做的,因爲它從來沒有創建的過程。我的第一個猜測是通過RMI發送進程對象,並讓客戶端應用程序在發生重新連接時將其發回,但這不起作用,因爲進程不可序列化。

我能想到的辦法本身做到這一點在Windows上使用JNA,但沒有人知道,如果有一個現有的庫,這將做到這一點?

乾杯!

+0

jvmstat可能會引起您的興趣。標準的JDK工具jvisualvm找到它沒有啓動的基於java的應用程序。 – 2011-12-13 17:45:43

回答

2

您可以使用WMI來實現此對Unix的Windows和命令行實用程序(如果需要)。 我知道以下與WMI合作的工具:JaWin,WIntegra,JInterop。

如果您的顯示器運行在Windows也可以使用JaWin。它是一個通過COM + API的JNI包裝。如果您想跨平臺並能夠從Unix機器上使用JInterop監控Windows機器。它是純java中實現DCOM協議的開源庫。 JIntegra類似,但商業。

編輯:甚至可能簡單的解決方案。如果你想監視Java應用程序,只需使用JMX。使用JMX遠程或本地連接到此應用程序。

祝你好運。

+0

謝謝你。我們實際上已經在使用JMX,我們遇到的問題是當應用程序無響應並且我們想要殺死它們時造成的。事實上,我從來沒有打算從頭開始寫這篇文章 - 這裏有更優雅的解決方案,但它是遺留代碼,所以我無能爲力。 – Andrew 2011-12-14 08:57:09