Есть ли в Linux функция, которая позволяет мне увидеть, сколько ЦП использовал процесс после его завершения? Мне нужно что-то похожее на команду bash «time». Я разветвляю () процесс, а затем жду завершения дочернего процесса, используя wait (). Способ точного измерения «реального» времени (фактического времени, прошедшего между fork() и exit()), даже когда вызов wait() был вызван спустя долгое время после того, как дочерний процесс стал зомби, также приветствуется, но я не уверен, что это возможный.
Процессорное время после завершения процесса
Ответы (2)
Конечно, 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. */
};
Функция bash «times» сообщает об общем времени пользователя/системы, используемом оболочкой и ее дочерними элементами. Эта функция, к сожалению, не сообщает об общем объеме памяти, вводе-выводе и т. д. IE: она не использует getrusage (что должно быть).
Программа /usr/bin/time даст вам время выполнения, объем памяти. Таким образом, вы можете сделать /usr/bin/time bash myprog.sh ... и получить накопленное время для всех детей.
time
не сработала бы. Как отмечаетman time
: большая часть информации, отображаемой временем, получена из системного вызова wait3(2). stackoverflow.com/questions/ 7050360/ дал ответ, но не бойтесь смотреть на источник. - person msw   schedule 13.08.2011apt-get source time
даст вам исходный код. - person msw   schedule 13.08.2011file /usr/bin/\[
. - person msw   schedule 13.08.2011