2011-03-12 49 views

回答

0

您可以os.fork, ptrace(PTRACE_ATTACH, child_pid, ...),然後致電resource.getrusage(RUSAGE_CHILDREN, ...)。既然你只是分叉,附加過程將是唯一的孩子。

+0

超級hacky,但它是一個通用的跨平臺解決方案。 – 2011-03-13 01:50:04

+0

是的,ptrace位讓我感到不安,但這就是Unix的意思。它希望你在障礙物上滾動,這就是你應該如何使用它。 – 2011-03-13 02:44:02

+0

爲什麼downvote? – 2011-04-14 02:25:38

1

我不知道你是否可以做到這一點,但在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: How to get number of mili seconds per jiffy和有關信息/proc/<PID>/stat中的字段來自proc(5)手冊頁。

相關問題