В Python, как я могу получить информацию о времени, например os.times () для конкретного дочернего процесса? - PullRequest
2 голосов
/ 12 марта 2011

Я могу использовать os.times или resource.getrlimit для получения времени пользователя текущего процесса, всех дочерних процессов или обоих.

Как получить информацию о времени для определенного дочернего процесса?

Ответы [ 2 ]

2 голосов
/ 12 марта 2011

Я не знаю, можете ли вы сделать это вообще, но в 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

Предположительно, у вас есть идентификаторы дочерних процессов, которые вас интересуют.

Я узнал, как получить значение sysconf(_SC_CLK_TCK) из этого вопроса: Python: Как получить количество миллисекунд за секунду , а информация о полях в /proc/<PID>/stat взята из proc(5) справочная страница.

0 голосов
/ 12 марта 2011

Можно os.fork, ptrace(PTRACE_ATTACH, child_pid, ...), затем позвонить resource.getrusage(RUSAGE_CHILDREN, ...). Поскольку вы только что разветвились, присоединенный процесс будет единственным потомком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...