linux - Python-重新循环文件以获取更新的信息

标签 linux python-3.x

我正在用 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”文件,直到进程结束,以便我可以获得峰值内存使用情况,而不是初始内存使用情况。任何见解将不胜感激,谢谢。

最佳答案

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

关于linux - Python-重新循环文件以获取更新的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17797005/

相关文章:

python - 如何在 python 中使用索引在列中打印 1 和 0?

linux - Powershell 无法在 VSCode Linux 上找到类型 [Pester.OutputTypes]

sql-server - 在 Linux 上连接到 MS SQL DB 时出现身份验证错误

java - 无法使用 java 运行时从 linux 平台上的另一个 jar 访问 jarfile

python - 测试列表中的连续数字

python - 如何在Python中创建多个类实例?

python-3.x - 如何在 Pyramid 框架内的请求之间缓存/内存 pandas DataFrame(昂贵的计算)?

python - 如何在管道内使用 SMOTENC(错误 : Some of the categorical indices are out of range)?

linux - 上传/Arduino 出现错误 : permission denied on Ubuntu 16. 04

linux - 如何在较新的 Linux 内核中查找堆栈内存段