为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Java 中的 SIGAR 或 OSHI API 获取特定应用程序的操作系统进程详细信息?

如何使用 Java 中的 SIGAR 或 OSHI API 获取特定应用程序的操作系统进程详细信息?

开心每一天1111 2023-09-06 17:13:44
SIGAR 或 OSHI 或任何其他类似的 API 是否提供开箱即用且最重要的是提取操作系统进程信息的通用功能?我的要求是获取特定程序(例如 Chrome)的所有操作系统进程的 PID 和其他一些详细信息。如下所示,我编写了自己的实现,但我必须为 Unix、Mac、Solaris 等想出一些不同的方法,如下所示特定于 Windows。为了保持通用,我想知道 SGIAR / OSHI 中是否有任何 OOTB 方法。public static List<String> getNodeDetailsFromWinOs(){        List<String> nodeList = new ArrayList<String>();        String process;        Process p = Runtime.getRuntime().exec("tasklist.exe /nh");        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));        while ((process = input.readLine()) != null)                         {                          nodeList.add(process.substring(10, process.indexOf(".")));                        }        input.close();        return nodeList;        }
查看完整描述

2 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

OSHI 的OSProcess类为 Windows、macOS、Linux、AIX、Solaris 和 FreeBSD 提供了这种开箱即用的功能。

SystemInfo si = new SystemInfo();

OperatingSystem os = si.getOperatingSystem();

OSProcess[] procs = os.getProcesses(0, null);


for (OSProcess p : procs) {

    if (p.getName().contains("Chrome")) {

        // do stuff with p

    }

}

您可能还会发现p.getParentProcessPid()和os.getChildProcesses(pid)方法可用于识别与父 Chrome 进程关联的其他进程(不包括名称“Chrome”)。


此外,从 Java 9 开始,核心 JDK 包含一个ProcessHandle类,其中包含一些基本信息,包括 PID。



查看完整回答
反对 回复 2023-09-06
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

我之前找不到它,因为 SIGAR 文档无法公开获取。我通过这个链接找到了它们。这包含文档和 API 参考。

顺便说一句, public long[] find(java.lang.String query) throws SigarException类中的方法ProcessFinder可用于获取操作系统详细信息。

查看完整回答
反对 回复 2023-09-06
  • 2 回答
  • 0 关注
  • 189 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信