如何获取当前打开的进程列表「Java」?

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

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签