我可以使用os.times或resource.getrlimit獲取當前進程,所有子進程或兩者的用戶時間。在python中,如何獲取特定子進程的時間信息,如os.times()?
如何獲取特定子進程的計時信息?
我可以使用os.times或resource.getrlimit獲取當前進程,所有子進程或兩者的用戶時間。在python中,如何獲取特定子進程的時間信息,如os.times()?
如何獲取特定子進程的計時信息?
您可以os.fork
, ptrace(PTRACE_ATTACH, child_pid, ...)
,然後致電resource.getrusage(RUSAGE_CHILDREN, ...)
。既然你只是分叉,附加過程將是唯一的孩子。
我不知道你是否可以做到這一點,但在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)
手冊頁。
超級hacky,但它是一個通用的跨平臺解決方案。 – 2011-03-13 01:50:04
是的,ptrace位讓我感到不安,但這就是Unix的意思。它希望你在障礙物上滾動,這就是你應該如何使用它。 – 2011-03-13 02:44:02
爲什麼downvote? – 2011-04-14 02:25:38