在Python中,如何获取特定子进程的时间信息,如os.times()?

2 投票
2 回答
1466 浏览
提问于 2025-04-16 13:33

我可以使用 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, ...) 来获取资源使用情况。因为你刚刚创建了一个子进程,所以连接的进程将是唯一的子进程。

撰写回答