Процессорное время после завершения процесса - PullRequest
1 голос
/ 13 августа 2011

Есть ли в Linux функция, позволяющая увидеть, сколько ЦП использовало процесс после его завершения?Мне нужно что-то похожее на команду "время" bash.Я выполняю fork () и затем жду, используя wait (), чтобы ребенок закончил.Способ точного измерения «реального» времени (фактического времени, прошедшего между fork () и exit ()), даже когда wait () вызывался задолго до того, как дочерний процесс стал зомби, также приветствуется, но я не уверен, что еговозможно.

Ответы [ 2 ]

5 голосов
/ 13 августа 2011

Конечно, wait3 и wait4 вы покрыли. В качестве альтернативы (и более переносимого) вы можете использовать getrusage(2).

Системные вызовы wait3 () и wait4 () похожи на waitpid (2), но дополнительно вернуть информацию об использовании ресурсов о ребенке в структура, указанная rusage.

Пример: wait3

struct rusage usage;
wait3(&status, 0, &usage);

Пример: getrusage

Конечно, wait3 и wait4 - это просто удобство. Чтобы вы могли использовать getrusage:

getrusage(RUSAGE_CHILDREN, &usage);

Недостатком является то, что это говорит вам о ресурсах, используемых ВСЕМИ завершенными дочерними элементами.

Итак, как только вы его получите, что вы будете делать с rusage? struct rusage имеет следующую форму:

struct rusage {
    struct timeval ru_utime; /* user CPU time used */
    struct timeval ru_stime; /* system CPU time used */
    /* More. */
};
0 голосов
/ 18 июля 2013
  1. Функция bash "times" сообщает общее время пользователя / системы, используемое оболочкой и ее дочерними элементами. К сожалению, эта функция не сообщает об общем объеме памяти, вводе / выводе и т. Д. IE: она не использует getrusage (что и должно быть).

  2. Программа / usr / bin / time предоставит вам время выполнения и объем памяти. Так что вы можете сделать / usr / bin / time bash myprog.sh ... и получить накопленное время для всех детей.

...