如何在Java中使用SIGAR或OSHI API获取特定应用程序的OS进程细节?
How to get OS process details of specific application using SIGAR or OSHI APIs in Java?
SIGAR 或 OSHI 或任何其他类似 API 是否提供开箱即用且最重要的是提取 OS 进程信息的通用功能?
我的要求是获取特定程序的所有 OS 进程的 PID 和其他一些详细信息,例如Chrome.
如下所示,我编写了自己的实现,但我必须为 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;
}
我之前找不到它,因为 SIGAR 文档不公开。我在 link 上找到了它们。这包含文档和 API Ref.
对了,方法
public long[] find(java.lang.String query) throws SigarException
in class ProcessFinder
可用于获取 OS 详细信息。
SIGAR API ref 可以从 https://sourceforge.net/projects/sigar/
下载
OSHI 的 OSProcess
class 为 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 class,其中包含一些基本信息,包括 PID。
SIGAR 或 OSHI 或任何其他类似 API 是否提供开箱即用且最重要的是提取 OS 进程信息的通用功能?
我的要求是获取特定程序的所有 OS 进程的 PID 和其他一些详细信息,例如Chrome.
如下所示,我编写了自己的实现,但我必须为 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;
}
我之前找不到它,因为 SIGAR 文档不公开。我在 link 上找到了它们。这包含文档和 API Ref.
对了,方法
public long[] find(java.lang.String query) throws SigarException
in class ProcessFinder
可用于获取 OS 详细信息。
SIGAR API ref 可以从 https://sourceforge.net/projects/sigar/
下载OSHI 的 OSProcess
class 为 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 class,其中包含一些基本信息,包括 PID。