2011-12-13 36 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