Python 如何获取正在运行的进程列表

Python 如何获取正在运行的进程列表

操作系统可以同时运行数百个任务/进程。作为Python开发者,这很重要,因为在处理消耗大量内存的程序时,我们可能想要删除一些不重要的任务。本文将讨论如何使用Python获取正在运行的进程列表。

使用psutil模块

psutil模块是一个强大的跨平台系统监控和进程管理Python库。它提供了一种方便一致的API来访问系统相关信息,如CPU使用率、内存利用率、磁盘使用率、网络统计等。由于它是跨平台的,相同的代码适用于所有操作系统

示例

在以下代码中,我们首先使用Python的import语句导入psutil库。接下来,我们使用Python的process_iter方法。这个方法返回系统中正在运行的所有进程。然后,我们使用循环遍历列表并打印所有正在运行的进程。

import psutil
processes = psutil.process_iter()
for process in processes:
    print(f"Process ID: {process.pid}, Name: {process.name()}")

输出

Process ID: 1, Name: systemd
Process ID: 2, Name: kthreadd
Process ID: 3, Name: rcu_gp
Process ID: 4, Name: rcu_par_gp
Process ID: 5, Name: slub_flushwq
Process ID: 6, Name: netns
.................................................
Process ID: 66499, Name: postgres
Process ID: 66500, Name: postgres
Process ID: 66501, Name: postgres
Process ID: 66614, Name: kworker/6:0-events

使用Subprocess和Platform模块

Subprocess和Platform模块是Python中处理操作系统的两个重要模块。Subprocess允许程序员与操作系统交互,并执行外部命令和脚本。当在Python代码中运行系统命令或管理外部程序时,这个模块特别有用。

另一方面,Platform模块提供有关Python脚本运行的平台和操作系统的信息。它提供了检索平台名称、版本、架构和硬件信息的方法和功能。当我们想要运行特定于平台的脚本时,这个模块非常有用。

示例

我们首先使用import语句导入Subprocess和Platform模块。接下来,我们初始化一个名为command的空字符串。我们使用Platform的system方法访问当前操作系统,并根据它更新command字符串的值。然后,我们使用Subprocess的check_output方法获取系统信息。我们将command参数传递给该方法,以告知它当前的操作系统。

import subprocess
import platform
command = ""
if platform.system() == "Windows":
    command = "tasklist"
elif platform.system() == "Linux":
    command = "ps aux"
elif platform.system() == "Darwin":
    command = "ps aux"
output = subprocess.check_output(command, shell=True, text=True)
print(output)

输出

USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.0 168556 13420 ?        Ss   09:37   0:01 /sbin/init splash
root           2  0.0  0.0      0     0 ?        S    09:37   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   09:37   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   09:37   0:00 [rcu_par_gp]
root           5  0.0  0.0      0     0 ?        I<   09:37   0:00 [slub_flushwq]
root           6  0.0  0.0      0     0 ?        I<   09:37   0:00 [netns]
...............................................................................................

handle=0,i,13555718610975125658,12212836532179255023,262144
asifr      66779  0.0  0.0   2888   960 ?        S    11:07   0:00 /bin/sh -c ps aux
asifr      66780  0.0  0.0  21324  3548 ?        R    11:07   0:00 ps aux

使用wmi模块

WMI(Windows Management Instrumentation)是一个用于与仅限于Windows系统交互的Python库。它提供了一个Python接口,用于访问和操作WMI数据,允许您检索有关硬件、软件、进程等的信息。通过WMI模块,您可以连接到本地或远程Windows计算机上的WMI服务,并查询可用的WMI类及其属性。这使您能够收集各种系统信息,如CPU使用率、内存使用率、磁盘空间、网络配置和已安装的软件。

示例

在以下代码中,我们首先导入了wmi模块。然后,我们使用WMI方法创建了一个对象。我们将对象命名为wmi_obj。接下来,我们使用Win32_Process方法获取系统中正在运行的所有进程的列表。请注意,此代码仅适用于Windows 32位机器。然后,我们遍历列表并打印结果。

import wmi
wmi_obj = wmi.WMI()
processes = wmi_obj.Win32_Process()
for process in processes:
    print(f"Process ID: {process.ProcessId}, Name: {process.Name}")

输出

Process ID: 0, Name: System Idle Process
Process ID: 4, Name: System
Process ID: 76, Name: Registry
Process ID: 244, Name: smss.exe
Process ID: 328, Name: csrss.exe
Process ID: 408, Name: wininit.exe
Process ID: 444, Name: csrss.exe
Process ID: 484, Name: services.exe
Process ID: 496, Name: lsass.exe
Process ID: 504, Name: lsm.exe
Process ID: 596, Name: svchost.exe
...

结论

在本文中,我们了解了如何使用Python获取进程列表。我们已经看到,Python允许跨平台和特定平台的库实现相同的功能。虽然psutil、platform等是跨平台的,可以在任何系统上运行,但像wmi这样的库只能在Windows系统上运行。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程