0

「/proc/PID/status」ファイルから子プロセスのピーク メモリ使用量を取得するプログラムを Python で作成しています。情報を正常に取得できますが、それはプロセスが開始されたときの最初のメモリ使用量であり、ピーク時のメモリ使用量ではありません。これが私のコードです:

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 に答える