Измерение статистики процессов в Linux

Я создаю программное обеспечение для соревнований по программированию. Программа пользователя принимается нашей системой оценивания и оценивается путем ее компиляции и запуска с помощью функций fork() и exec(). Родительский процесс ожидает завершения дочернего процесса (процесс отправки), а затем очищает его.

Чтобы дать полезную информацию о запуске программы, я хочу измерить время ЦП и пиковую память, используемую программой. Отслеживает ли ядро ​​Linux эти значения? Есть ли другой способ получить эту информацию?


person donatello    schedule 03.03.2010    source источник
comment
Будьте осторожны при этом, мошеннический пользователь может преподнести неприятный сюрприз в своей программе.   -  person a'r    schedule 03.03.2010
comment
Мы ограничиваем максимальное время ЦП, открываемые файлы и т. д., используя системный вызов setrlimit, поэтому я не думаю, что пользователь может преподнести какие-либо неприятные сюрпризы :)   -  person donatello    schedule 03.03.2010


Ответы (5)


Если вы вызовете системный вызов wait4(), чтобы собрать дочерний элемент, когда он завершится, он заполнит структуру struct rusage с использованием ресурсов дочернего элемента (ru_utime и ru_stime удерживают время пользователя и системного ЦП, используемое дочерним элементом соответственно).

person caf    schedule 03.03.2010

Вы можете использовать файл getrusage() или acct() (подробнее здесь) системные вызовы

person jpalecek    schedule 03.03.2010

Несложное (но простое) решение состоит в том, чтобы периодически сбрасывать вывод top в пакетном режиме и затем анализировать его.

person leonm    schedule 03.03.2010

Думаю, может помочь программа time(1). Это намного проще, чем опрос сверху.

Выдержка из справочной страницы:

   Disregarding  the
   name  of  the  utility, GNU makes it output lots of useful information,
   not only about time used, but also on other resources like memory,  I/O
   and  IPC calls (where available).
person Roman Dmitrienko    schedule 03.03.2010

Вы можете проверить верхнюю команду. Это может помочь.

person Jay    schedule 03.03.2010
comment
Было бы лучше, если бы отрицательный голос был объяснен? Я знаю, что люди опубликовали лучшие ответы на этот вопрос, но я не думаю, что этот ответ был совершенно неуместным или неправильным. Пожалуйста, поправьте меня, если я ошибаюсь. - person Jay; 03.03.2010
comment
похоже решение автоматизировано. top — это программа для конечного пользователя, не подходящая для автоматизации. - person Janus Troelsen; 26.07.2012