1

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;    
    }
4

2 回答 2

2

我之前找不到它,因为 SIGAR 文档无法公开获得。我在这个链接上找到了它们。这包含 doc 和 API Ref。

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

SIGAR API ref 可以从https://sourceforge.net/projects/sigar/下载

于 2019-09-28T14:52:44.930 回答
2

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。

于 2019-09-29T19:52:48.900 回答