首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中使用SIGAR或OSHI API获取具体应用的操作系统进程详情?

如何在Java中使用SIGAR或OSHI API获取具体应用的操作系统进程详情?
EN

Stack Overflow用户
提问于 2019-09-28 21:10:27
回答 2查看 307关注 0票数 1

SIGAR或OSHI或任何其他类似的API是否提供了开箱即用的功能,最重要的是,提供了提取操作系统进程信息的通用功能?

我的要求是获取特定程序(例如Chrome )的所有操作系统进程的PID和其他一些细节。

如下所示,我编写了自己的实现,但我必须为Unix、Mac、Solaris等提出一个稍微不同的方法,因为下面是特定于Windows的。为了保持通用性,我想知道SGIAR / OSHI中是否有OOTB方法。

代码语言:javascript
复制
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;    
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-30 03:52:49

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

代码语言:javascript
复制
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")很有用。

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

票数 2
EN

Stack Overflow用户

发布于 2019-09-28 22:52:45

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

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58146630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档