Java代码列出localhost JVM中Java进程的最佳方式(适用于Linux和Windows)
我正在编写一个在Linux和Windows系统中运行的控制台应用程序。此应用程序将主要在JRE 1.8环境中运行
在我的代码中,它需要获取在运行我的应用程序的主机上运行的Java进程的列表。我读过关于jps的帖子,它是JDK的一部分,但不是JRE,而且它是一个独立的可执行文件
我的问题是,是否有任何java库可以用来列出(理想情况下也可以杀死一些)正在运行的java进程?最好,我不想麻烦地用运行时之类的东西调用jps可执行文件。exec()
提前感谢您的建议
# 1 楼答案
我刚刚发现你需要JRE1的解决方案。8,这只对JRE9+有帮助
在JRE中扫描进程的一种简单方法是使用
ProcessHandle.allProcesses()
。这将读取所有进程,您可以在与“java”或“java.exe”匹配的简单名称上添加筛选器:这种方法不会发现嵌入在EXE中的Java虚拟机,比如来自
jpackage
,因此不如使用JDKjps
可靠,后者可以识别jpackage
EXE和jshell.exe
等JDK工具# 2 楼答案
我终于找到了名为Oshi的第三方库,它显然不需要JDK,并且与Java1.8兼容:https://github.com/oshi/oshi
以下是一个示例方法,供将来参考: