如何查找每个java进程?

时间:2015-07-08 20:37:33

标签: java c windows

是否有可能找到每个正在运行的java进程?具体来说,我需要Java进程的ProcessId。

如果我安装Java Developement Kit,则会有一个名为jps.rexe的exe。如果我运行这个exe,它会找到每个正在运行的java进程并列出它们的ProcessID。基本上我需要相同,但写在Cjps.exe需要安装Java Developement Kit。

另请注意,有两种情况:
   - java.exejavaw.exe(还有一些)流程会启动所需的流程,因此在这种情况下,它会很容易"找到java进程    - 第二个更复杂。应用程序将启动,但只有一些组件或功能需要java,并且没有运行java.exejavaw.exe进程,但应用程序仍使用jre。

希望很清楚,我想要的是什么。

有没有人知道如何做到这一点?

提前致谢!

2 个答案:

答案 0 :(得分:1)

(以此作为评论,遗憾的是很长时间,所以我将其作为答案发布。)只是提供一些链接,我偶然发现了寻找答案:

由于使用JRE文件可能意味着将其打开,因此Sysinternals工具Handle可能会有所帮助。似乎使用Windows Object Manager能够找到打开的文件(通过路径片段)及其相关的进程。

与对象管理器相关的唯一有希望的C source code我发现很遗憾看起来很过时(1997)。但至少在那里使用的关键函数NtQueryDirectoryObject仍然存在,尽管“没有关联的导入库或头文件”。因此,仍然可以使用该C代码。

答案 1 :(得分:0)

Java 8中的JDK为Monitoring提供了几个库。我使用过visualvm: http://docs.oracle.com/javase/8/docs/technotes/guides/visualvm/

visualvm允许我们可视化和恢复有关进程ID的信息,每个进程使用的内存量等等。因此,使用此工具可以找到每个正在运行的java进程。

如果您需要使用进程ID进行一些工作,下一步将是visualvm用于获取此类信息的方式。

祝你好运!