1
我想弄清楚如何使用Hyperic SIGAR
獲取系統進程的list
。這是我到目前爲止:使用Hyperic獲取Java系統進程列表SIGAR
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異常後,似乎任意數量的迭代。例如,有一次,我得到這個:
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)。但是,爲系統進程執行此操作似乎並不能很好地工作。我該如何做到這一點?