<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
@mdadm建议了一个更简单的解决方案:
time命令:
from subprocess import Popen, PIPEp = Popen(['time', '-f', '%M'] + args, stderr=PIPE)ru_maxrss = int(p.communicate()[1])print("Maximum rss %d KB" % ru_maxrss)GNU时间用于
wait3()填充资源使用情况信息(如果可用)。可以在Python中调用:
import osfrom subprocess import Popenp = 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: 它们是相似的 。



