1. 概述
在Java中,我们可以使用Runtime
类和Process
类来获取当前打开的进程列表。
2. 使用Runtime
类
Java中的Runtime
类可以用来获取当前运行的Java
虚拟机关联的Runtime
对象。Runtime
类提供了一系列方法来执行命令、获取进程等信息。
2.1 获取Runtime
对象
可以使用getRuntime()
静态方法获取Runtime
对象:
Runtime runtime = Runtime.getRuntime();
2.2 执行系统命令
可以使用exec()
方法执行系统命令:
Process process = runtime.exec("tasklist.exe");
该命令会启动tasklist.exe
程序,并返回一个Process
对象,该对象提供了获取进程相关信息的方法。
2.3 获取进程信息
可以调用Process
对象的getInputStream()
方法获取进程的输出流,然后使用流的方式读取出进程相关的信息。
以下是获取当前系统所有进程的例子:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class ProcessLister {
public static void main(String[] args) {
try {
// 获取Runtime对象
Runtime runtime = Runtime.getRuntime();
// 执行tasklist.exe命令
Process process = runtime.exec("tasklist.exe");
// 获取进程输出流
BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
// 获取进程错误流
BufferedReader error = new BufferedReader(new InputStreamReader(process.getErrorStream()));
// 读取进程信息
String line;
while ((line = input.readLine()) != null) {
System.out.println(line);
}
// 读取错误信息
while ((line = error.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
该程序会打印当前系统中所有进程的相关信息。
3. 使用Process
类
Java中的Process
类用来执行外部进程,可以获取进程相关的信息。
3.1 获取当前进程
可以使用ProcessHandle.current()
静态方法获取当前进程的ProcessHandle
对象:
ProcessHandle handle = ProcessHandle.current();
ProcessHandle
对象提供了一系列方法来获取进程信息,例如:
pid()
:获取进程ID。
info()
:获取进程相关信息,返回ProcessHandle.Info
对象。
parent()
:获取父进程。
children()
:获取子进程。
3.2 获取指定进程
可以使用ProcessHandle.of()
静态方法根据进程ID获取指定进程的ProcessHandle
对象:
ProcessHandle handle = ProcessHandle.of(1234).orElse(null);
ProcessHandle.of()
方法返回一个Optional<ProcessHandle>
对象,需要使用orElse()
方法获取ProcessHandle
对象。
同样地,ProcessHandle
对象提供了一系列方法来获取进程信息。
3.3 获取所有进程
可以使用ProcessHandle.allProcesses()
静态方法获取所有进程的Stream
,然后可以使用Stream
相关的方法进行进一步处理。
以下是获取所有进程的例子:
import java.util.List;
public class ProcessLister {
public static void main(String[] args) {
List<ProcessHandle> processes = ProcessHandle.allProcesses().toList();
processes.forEach(process -> {
System.out.println("Process ID: " + process.pid());
System.out.println("Process Info: " + process.info());
});
}
}
该程序会打印所有进程的相关信息。
4. 总结
本文介绍了如何使用Runtime
类和Process
类来获取当前打开的进程列表。可以根据需要选择合适的方式进行处理。