如何在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 中查找当前打开进程的列表。

更新于:2023年4月4日

2K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告