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



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

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。

我之前找不到它,因为 SIGAR 文档没有公开提供。我在此链接中找到了它们。这包含文档和 API 参考。

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

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

相关内容

  • 没有找到相关文章

最新更新