首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Hyperic SIGAR在Java中获取系统进程列表

使用Hyperic SIGAR在Java中获取系统进程列表
EN

Stack Overflow用户
提问于 2013-04-21 19:47:48
回答 1查看 2.6K关注 0票数 1

我试图弄清楚如何使用list获得系统进程的Hyperic SIGAR。到目前为止,这就是我所拥有的:

代码语言:javascript
复制
import org.hyperic.sigar.Humidor;
import org.hyperic.sigar.ProcExe;
import org.hyperic.sigar.SigarException;
import org.hyperic.sigar.SigarProxy;

public class ProcessReader 
{
    Humidor h; 
    public ProcessReader()
    {
        h = Humidor.getInstance(); 
    }
    public void printProcessList()
    {
        SigarProxy sp = h.getSigar();
        try 
        {
            long[] pidList = sp.getProcList();
            for(int i=0; i<pidList.length; i++)
            {
                ProcExe temp = sp.getProcExe(pidList[i]); 
                String exeName = temp.getName(); 
                System.out.println(pidList[i] + " " + exeName); 
            }
        } catch (SigarException e) {
            e.printStackTrace();
        } 
    }
}

然而,这只是在似乎任意次数的迭代之后抛出一个SIGAR异常。例如,有一次,我得到了这个:

代码语言:javascript
复制
1313 /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java

1311 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker

然后它在行中为无效的参数抛出一个Sigar Exception

ProcExe temp = sp.getProcExe(pidList[i]);

有时,它会运行两个以上的迭代。有时,它运行的时间少于两次。我不太清楚发生了什么,而且SIGAR文档似乎没有多大帮助。当我想访问CPU和RAM使用信息时,我使用了一种类似的方法:获取Humidor、从它获取SIGARProxy、然后从SIGARProxy获取信息对象(分别为CPU和Mem )。然而,为系统进程这样做似乎不是很好。我该怎么做?

EN

回答 1

Stack Overflow用户

发布于 2013-08-27 11:38:30

您可以检查与Sigar包一起交付的org.hyperic.sigar.cmd包下的类"Ps“。它列出了系统上运行的所有进程。我相信您也可以操纵它来获得系统进程。可以使用以下选项筛选输出:

  1. org/hyperic/sigar/cmd/Ps "CredName.User.eq=$USER“

或者,如果要搜索particualr进程,请使用以下命令:

  1. org/hyperic/sigar/cmd/Ps "State.Name.eq=sshd“
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16135459

复制
相关文章

相似问题

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