0

我正在用 Python 编写一个程序,它从“/proc/PID/status”文件中获取我的子进程的峰值内存使用量。我可以成功获取信息,但它只是进程开始时的初始内存使用量,而不是峰值内存使用量。这是我的代码:

def worker(self):
    cmd = ["/home/orlando/CountMem","400000000","2000"]
    p = subprocess.Popen(cmd,stdout=subprocess.PIPE)
    id_list = []
    id_list.append(p.pid)

    for num in id_list:
       stat_file = open("/proc/{0}/status".format(num))
       for i, line in enumerate(stat_file):
           if i == 3:
              print line
           if  i == 10:
              print line
    return id_list

if __name__ == '__main__':
    count = multiprocessing.cpu_count()
    pool = multiprocessing.Pool(processes = count)
    print(pool.map(worker,['ls']*count))

这是我从这段代码中得到的输出:

Pid:    7839
Pid:    7838


VmPeak:       12 kB

VmPeak:       12 kB

Pid:    7841

VmPeak:     2400 kB

Pid:    7840

VmPeak:     2400 kB

Pid:    7843

VmPeak:       12 kB

Pid:    7842

VmPeak:       12 kB

Pid:    7844

VmPeak:       12 kB

Pid:    7845

VmPeak:     2400 kB

希望让这一点更清楚一点,我想多次读取“/proc/PID/status”文件,直到进程结束,以便我可以获得峰值内存使用量而不是初始内存使用量。任何见解将不胜感激,谢谢。

4

1 回答 1

0

在检查 pid 的 for 循环周围放置一个 while 循环。在每个循环之后,检查每个进程是否仍在运行。如果没有,请将其从您的 id_list() 中删除。所以条件是 while (len(id_list) > 0):

于 2013-07-22T21:43:36.033 回答