2017-07-12 5 views
1

proc/pid/statusにアクセスしてプロセスに対してVmPeakを取得する必要があります。プロセスが長くなると別のプロセスを使用して取得できますスレッドは小さいプロセスのために私はいつもエラー(そのようなプロセスはありません)があります。私は仕事を完了するために使用できる方法や回避策があります。私はPython 2.7をuisngしています、これまでのところ私は以下を行っています..終了後またはプロセスが終了する直前にproc/pid/statusを取得する方法はありますか?

import os 
import subprocess 
import threading 
from shutil import copyfile 
import time 

rp = None 
br = 0 
pid = -1 


class MemoryThread (threading.Thread): 
    def __init__(self): 
     threading.Thread.__init__(self) 

    def run(self): 
     global br, rp 
     while br == 0: 
      try: 
       pid = rp.pid 
      except Exception as e: 
       pid = -1 
      if not pid == -1: 
       try: 
        pp = open("/proc/" + str(pid) + "/status") 
        st = "X" 
        for l in pp.readlines(): 
         if l.startswith("State:"): 
          st = l.split(":", 1)[1].strip().split(' ')[0] 
         if st == "R": 
          copyfile("/proc/" + str(pid) + "/status", "status.txt") 
          print "copied" 
          pp.close() 

       except Exception as ee: 
        print ee 


th = MemoryThread() 
th.start() 
cmd = "/home/mursalin/Desktop/A" 
cmd = cmd.split(" ") 
path_stdout = "/home/mursalin/Desktop/stdout.txt" 
path_stderr = "/home/mursalin/Desktop/stderr.txt" 
path_stdin = "/home/mursalin/Desktop/inp.txt" 
rp = subprocess.Popen(cmd, stdin=open(path_stdin, "r"), stdout=False, stderr=open(
    path_stderr, "w"), shell=False, preexec_fn=False) 
rp.communicate() 
br = 1 

答えて

0

サブプロセスをゾンビ状態にしておくと、プロセスステータスを収集できます。しかしsubprocess.callは自動的にゾンビプロセスを収集し、ゾンビ状態のサブプロセスを防止します。

この問題を解決するには、os.spawnos.popenのような下位APIを使用する必要があります。

関連する問題