首页 > 解决方案 > 获取整个进程组的cpu使用率

问题描述

问题

我有一个使用 Popen 运行的程序,它产生了一堆子进程。这些子进程每隔几分钟就会关闭一次,以被新的子进程替换。主进程(我称之为 Popen 的程序)很快就死掉了。我试图弄清楚如何获取进程组中所有内容的 cpu 使用率。

我试过的

我试过wait4和getrusage。我也尝试过 psutil 但我意识到,如果我想检查资源使用情况,我必须生成一堆线程来同时检查所有超进程的资源使用情况,这会很混乱且容易出错。

这是一个不起作用的代码示例。它仅获取直系子级的资源使用情况,而没有获取大子级的资源使用情况。

old = time.time()
proc = Popen(["g09", "../sto.com"], text=True, stderr=PIPE, preexec_fn=setsid)
ru = wait4(proc.pid, 0)
new = time.time()
print(100*(ru.ru_utime + ru.ru_stime)/(new - old))
ru = getrusage(RUSAGE_CHILDREN)
print(100*(ru.ru_utime + ru.ru_stime)/(new - old))

我需要设置一个新的 sid(或 pgid),因为有时我想在进程完成之前终止它,如果我不设置一个新的,那么整个 python 脚本就会随之失败。

附言

我可以只使用 time 命令(如Popen(["time", "g09",...])),但我想知道是否只有在 python 中才能做到这一点。

标签: pythonlinuxpid

解决方案


推荐阅读