【问题标题】:Get Process Information After Termination终止后获取进程信息
【发布时间】:2013-07-28 07:51:42
【问题描述】:

我需要一些关于进程终止后的信息。

utimeVMPeak/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(),这将释放所有资源。)

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

【问题讨论】:

  • 这不是python的问题,而是Linux编程的问题。

标签: python linux process popen pid


【解决方案1】:

引用man 5 proc:

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

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

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

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 都是浮点值。

【讨论】:

  • 所以我需要一种方法来等待终止而无需 wait() ;-)。保存 PID 没有用,因为如果我 wait() PID 将被释放,然后那里没有 /proc。
  • /proc 将保留给没有被 wait() 的僵尸进程。
  • 僵尸进程仍然被终止;操作系统确实保留了 proc 信息,是的,但这只是因为仍有依赖于父 PID 的子进程。你想在这里跟踪一个僵尸进程吗?
  • 我只是想要一种在终止后或终止前 0.00001 秒获取一些信息的方法。 ;-)
  • 我的回答告诉你这是不可能的。终止后,通常 proc 信息消失了,并且在终止之前没有通知。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
  • 2023-03-03
  • 2012-02-22
  • 2016-11-10
  • 2020-06-08
  • 1970-01-01
相关资源
最近更新 更多