Я создаю программное обеспечение конкурса программирования. Программа пользователя получена нашей системой оценки и оценена путем компиляции ее и выполнения ее через ветвление () и должностное лицо (). Родительский процесс ожидает ребенка (процесс представления) для выхода и затем очищает его.
Для предоставления полезной информации о выполнении программы я хочу измерить процессорное время и пиковую память, используемую программой. Ядро Linux отслеживает эти значения? Там какой-либо другой путь состоит в том, чтобы получить эту информацию?
Если вы вызываете системный вызов wait4 ()
, чтобы пожать потомок, когда он завершается, он заполнит структуру struct rusage
с использованием ресурсов дочернего элемента ( ru_utime
и ru_stime
содержат пользовательское и системное время ЦП, используемое дочерним элементом соответственно).
Вы можете использовать getrusage()
или acct()
(подробнее здесь) syscalls
Думаю, может помочь программа 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).
Низкотехнологичное (но простое) решение - периодически сбрасывать вывод top
в пакетном режиме и затем анализировать его.
Вы можете проверить верхнюю команду. Это могло бы помочь.