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系统上运行。