<defunct>
表示该子进程是一个僵尸进程(已死,但其父级(p.poll()
或p.wait()
)尚未读取其状态)。这似乎都psutil
和ps
节目RSS
是这样的过程为零。
结果取决于子流程是否比p.memory_info()
调用的更早退出。这是一场比赛。如果您在C ++程序的出口处添加了延迟,则p.memory_info()
可能在子进程退出之前被调用,并且您应该获得非零的结果。
问题是我可以得到任意程序进行评估。语言也不是固定的。没有解决这个问题的优雅方法吗?
您可能需要操作系统支持才能保存有关子进程内存使用情况的信息,即使该进程退出后也是如此。或者,您可以使用诸如的内存分析器运行该程序valgrind
并读取其结果。收集结果:
$ valgrind --tool=massif cmd arg1 arg2
要查看结果,可以使用ms_print
:
$ ms_print massif.out.* | less
或GUI Massif- Visualizer
from subprocess import Popen, PIPE
p = Popen(['time', '-f', '%M'] + args, stderr=PIPE)
ru_maxRSS = int(p.communicate()[1])
print("Maximum RSS %d KB" % ru_maxRSS)
GNU时间用于wait3()
填充资源使用情况信息(如果可用)。可以在Python中调用:
import os
from subprocess import Popen
p = Popen(args)
ru = os.wait4(p.pid, 0)[2]
print("Maximum RSS %d KB" % ru.ru_maxRSS)
我已经比较了psutil.Process.memory_info
(RSS)ru_maxRSS
返回os.wait4
的最大值,和返回的值以及通过报告的最大总内存valgrind --tool=massif
: 它们是相似的 。