Определение количества времени, затрачиваемого процессами на блокировку / выполнение - PullRequest
6 голосов
/ 21 апреля 2009

ОК, поэтому для имеющегося у меня программного задания (да, нам всем разрешено обращаться к любому источнику, который мы находим подходящим для помощи), я должен выяснить, сколько времени процессы тратят на блокировку / спящий режим / работу.

Моя первая попытка была создать скрипт bash ... который выглядел примерно так:

for i in `ls /proc/ | egrep [0-9]+`
do
        cat /proc/$i/status | grep State
done

но тогда все проблемы сообщают о состоянии сна. Плюс этот метод потребует от меня опроса как сумасшедшего ... Так что запуск теста, вероятно, изменит результаты ... (тьфу)

Теперь о компиляции новой версии Linux с системными вызовами или о способе отслеживания состояний процессов не может быть и речи. Единственное, что меня беспокоит, - это попытаться выяснить, как отслеживать изменения состояний процесса, и убедиться, что я ничего не пропустил ...

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Если вы хотите получить текущую статистику для вещей, существующих в настоящее время ...

ps -Ae pid,comm,state,time,etime

-A для всего процесса, -e для пользовательского вывода (просто pid, команда, состояние, время (время ЦП), истекшее время)

Если предположить, что вопрос касается ВСЕХ процессов (в том числе завершенных), то для этого потребуется какой-нибудь демон аудита, который будет следить за процессами и получать эту информацию по завершении.

0 голосов
/ 02 мая 2009

Вы можете использовать «время»

 $ time ls /usr/bin

 real    0m4.756s
 user    0m0.051s
 sys     0m0.078s

real - sys = общее время ожидания ввода / вывода (спящий режим / блокировка)

sys - пользователь = время, потраченное на системные вызовы

пользователь = время, потраченное на выполнение инструкций только в вашей программе (возможно, включая динамические ссылки, не уверенные в этом)

...