终止后获取过程信息

时间:2013-07-28 07:51:42

标签: python linux process popen pid

我需要一些流程终止后的信息

例如utime中的VMPeak/proc就像这样:

proc.wait()
with open('/proc/%d/stat' % proc.pid, "r") as f:
    stat = str(f.read()).strip().split()
    # 14th column is utime, 15th column is stime (man 5 proc)                  
    cpu_time = int(stat[14]) + int(stat[15])
    return cpu_time

但是Python Popen.wait()发布了PID,所以我会得到:

No such file or directory

我可以在终止后获得 ,或等待终止而不发布PID? (我的意思是等待终止没有调用wait(),这将释放所有资源。)

如果你能帮助我,我将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

引自man 5 proc

  

/proc/[pid]
  每个正在运行的进程都有一个数字子目录;子目录由进程ID命名。

已终止的进程不再运行,其/proc/[pid]目录(包括stat文件)不再存在

如果它会在那里,你可以在调用proc.wait() 之前将PID存储在变量中:

pid = proc.pid
proc.wait()
with open('/proc/%d/stat' % pid, "r") as f:

没有“刚刚终止”事件; subprocess等待,然后获取退出代码。

您可以自己等待os.wait4()代替:

pid, status, resources = os.wait4(proc.pid, 0)
cpu_time = resources.ru_utime + resources.ru_stime

resources是一个命名元组,请参阅resource.getrusage()以获取它支持的名称列表。 .ru_utime.ru_stime都是浮点值。