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类来获取当前打开的进程列表。可以根据需要选择合适的方式进行处理。


