Java 如何获取当前打开的进程列表
用户有必要知道他们系统中运行的进程,无论是前台还是后台。在windows中,我们可以使用任务管理器来做到这一点,但实际上它使用了一个叫做tasklist的程序。Tasklist不仅能提供当前正在运行的进程列表,还能给出每个进程的进程id、会话名称、会话和内存使用情况等详细信息。
在本文中,我们将看到如何使用Java编程语言获取当前打开的进程列表。
步骤
步骤 1 - 创建一个执行tasklist.exe的进程。
步骤 2 - 创建一个接受进程对象的BufferedReader类。
步骤 3 - 使用while循环逐行读取进程的详细信息并将其打印出来。
语法
要在system32文件夹中运行tasklist.exe,我们需要调用一个进程对象并执行它。
以下是使用该方法执行tasklist.exe程序的语法:
Process process_object = Runtime.getRuntime().exec(System.getenv("windir") + "\system32" + "tasklist.exe");
注意 该程序无法在任何在线编辑器上运行。要获取本地系统中当前打开的进程列表,您需要仅在本地编辑器(Java IDE)上运行它。
方法:使用tasklist.exe列出所有活动进程
在这种方法中,我们调用执行WIN32文件夹中的tasklist.exe的进程。然后,我们使用BufferedReader读取所有活动进程,并逐个将其打印到控制台。
示例
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
try {
// String variable to store process details
String processes;
// Execute tasklis.exe from win32
Process p = Runtime.getRuntime().exec(System.getenv("windir") + "\system32" + "tasklist.exe");
// Buffered reader to read from the process object
BufferedReader br = new BufferedReader(newInputStreamReader(p.getInputStream()));
// Prints all processes one by one
while ((processes = br.readLine()) != null) {
System.out.println(processes);
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
输出
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 8 K
System 4 Services 0 9,416 K
Registry 140 Services 0 30,420 K
smss.exe 604 Services 0 1,076 K
csrss.exe 976 Services 0 5,936 K
csrss.exe 1112 Console 1 14,144 K
winlogon.exe 1164 Console 1 11,704 K
wininit.exe 1216 Services 0 6,628 K
services.exe 1260 Services 0 9,804 K
lsass.exe 1276 Services 0 27,360 K
svchost.exe 1396 Services 0 1,388 K
fontdrvhost.exe 1428 Console 1 6,608 K
...
在本文中,我们探讨了如何在Java中找到当前打开的进程列表。