> 文章列表 > python实现监控指定进程的CPU利用率、内存占用

python实现监控指定进程的CPU利用率、内存占用

python实现监控指定进程的CPU利用率、内存占用

        因为需要一直关注被测软件的CPU利用率和内存占用,人工记录十分麻烦,所以想做一个应用程序来代替手工记录。

思路:

1.弹窗,输入进程

2.获取进程对象

3.日志保存在一个csv文件中,文件命名方式为:进程名+Process+进程号

4.文件第一行写入进程名

5.获取当前时间、进程的CPU利用率、内存占用

6.将时间,CPU利用率,内存占用写入csv文件并保存

7.三秒钟获取和记录一次

我要求追加,每次运行该程序的时候不删除之前的文件,所以把文件是否存在的判断给注释掉了

这里我没用with open,直接用的open打开

因为刚开始用with open然后将这个代码打包为exe文件并执行之后,等了1分钟发现并没有东西写入,猜测可能是还没保存或者杀死进程导致文件没保存?

但是运行一天之后发现确实有东西写入,也可能等待时间1分钟太短。(不太清楚,或者有大佬可以给我提提建议)

我的解决方式:每次循环都写一次文件保存一次(但是感觉这样好像性能不高,但对于功能来说完全满足我的需求)

该段代码缺点:

1.在监控过程中,自己关闭监控的应用程序,本程序会退出
2.监控过程中,直接打开记录的文件,程序会退出

import time
from tkinter import simpledialog
import tkinter
import psutil
import osroot=tkinter.Tk()
root.withdraw()pid=int(simpledialog.askstring(title="pid",prompt="输入进程号"))
p=psutil.Process(pid)filename=p.name().split(".")[0]+"Process"+str(pid)+".csv"
#if os.path.exists("./"+filename):
#    os.remove("./"+filename)# 文件第一行写入进程名
f=open("./"+filename,"a+")
f.write(p.name()+"\\n")
f.close()# 循环记录时间、进程CPU利用率,内存占用
while True:f=open("./"+filename,"a+")f.write("TIME,%CPU,%MEM\\n")current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))cpu_percent=p.cpu_percent()mem_percent=p.memory_percent()line=current_time+","+str(cpu_percent)+","+str(mem_percent)f.write(line+"\\n")f.close()time.sleep(3)

另外,打包为可执行文件之后,这是一个无界面的程序,在任务管理器能找到该进程,所以我写了一个批处理文件来结束该进程。

taskkill /f /im XXXX.exeecho 结束完成
pause

写的不对或者不完善的请大佬们多多指正