python3 监控进程

宁为泽 2周前 12浏览 0评论

在使用Python进行项目开发时,经常会遇到需要监控进程的需求。Python提供了一些模块可以帮助我们实现进程的监控,比如psutil模块和subprocess模块。

使用psutil模块监控进程

import psutil

# 获取所有进程列表
pids = psutil.pids()

# 遍历进程列表
for pid in pids:
    try:
        p = psutil.Process(pid)
        # 进程名称
        name = p.name()
        # 进程状态
        status = p.status()
        # 进程占用CPU的时间比例
        cpu_percent = p.cpu_percent(interval=1)
        # 进程内存占用量
        memory_info = p.memory_info().rss
        print(pid, name, status, cpu_percent, memory_info)
    except:
        pass

上述代码中psutil.pids()函数返回所有进程的PID列表,然后遍历PID列表获取每个进程的信息。通过psutil.Process(pid)函数可以得到一个Process对象,然后调用name()status()等方法获得进程的名称、状态、CPU占用率和内存占用量。

需要注意的是,在Linux和Windows系统中获取进程信息的方法不同,使用psutil模块可以避免这个问题。此外,psutil模块还支持查看系统资源占用情况、网络连接等功能。

使用subprocess模块监控进程

import subprocess

# 执行命令
proc = subprocess.Popen("ping baidu.com -n 10", stdout=subprocess.PIPE)

# 读取输出结果
while True:
    line = proc.stdout.readline()
    if not line:
        break
    print(line.strip().decode("gbk"))

上述代码中subprocess.Popen()函数执行命令并返回一个Popen对象,然后可以通过stdout属性获取命令的输出结果。通过stdout.readline()方法可以逐行读取输出结果。

需要注意的是,subprocess模块执行命令时需要注意参数的转义和编码问题,否则可能会导致程序无法执行。