在Python中,如何获取特定子进程的时间信息,如os.times()?
我可以使用 os.times 或 resource.getrlimit 来获取当前进程、所有子进程的用户时间,或者两者的时间。
那么,我该如何获取某个特定子进程的时间信息呢?
2 个回答
2
我不知道这个方法是否适用于所有情况,但在Linux系统上,你可以通过解析 /proc/<PID>/stat
文件来找到任何进程的前四个值,这些值是你从 os.times
获取的。例如:
import sys
import os
if not len(sys.argv) == 2:
print >> sys.stderr, "Usage: %s <PID>" % (sys.argv[0])
sys.exit(1)
pid = int(sys.argv[1])
hz = os.sysconf(os.sysconf_names['SC_CLK_TCK'])
with open("/proc/%d/stat" % (pid,)) as fp:
fields = fp.read().split(' ')[13:17]
utime, stime, cutime, cstime = [ (float(f) / hz) for f in fields ]
print "utime in clock ticks:", utime
print "stime in clock ticks:", stime
print "cutime in clock ticks:", cutime
print "cstime in clock ticks:", cstime
假设你已经知道了你感兴趣的子进程的进程ID。
我从这个问题中找到了如何获取 sysconf(_SC_CLK_TCK)
的值:Python: 如何获取每个时钟周期的毫秒数,而关于 /proc/<PID>/stat
文件中字段的信息则来自 proc(5)
的手册。
0
你可以使用 os.fork
这个命令,然后用 ptrace(PTRACE_ATTACH, child_pid, ...)
来连接到子进程,接着调用 resource.getrusage(RUSAGE_CHILDREN, ...)
来获取资源使用情况。因为你刚刚创建了一个子进程,所以连接的进程将是唯一的子进程。