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


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

使用psutil模块

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

示例

在下面的代码中,我们首先使用Python的import语句导入psutil库。接下来,我们使用了Python的process_iter方法。该方法返回系统中所有正在运行的进程。接下来,我们使用for循环迭代列表并打印所有正在运行的进程。

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)是一个Python库,仅用于与基于Windows的系统交互。它提供了一个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系统上运行。

更新于:2023年7月18日

6000+ 浏览量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告