Как проверить, сколько времени длился процесс после его завершения?

13

В настоящее время я использую следующее, чтобы проверить, как долго на самом деле выполняется процесс:

ps -eo uid,pid,etime | egrep '^ *MY_ID' | egrep 'PID_OF_PROCESS'

И это выводит следующее:

MY_ID PID_OF_PROCESS       00:16

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

Диего
источник

Ответы:

14

Я не думаю, что можно получить такую ​​информацию после того, как процесс уже завершен.

Если вы заранее знаете, что вам понадобится эта информация, вы можете выполнить команду как

time <command>

например

~> time sleep 1

real        0m1.003s
user        0m0.002s
sys         0m0.001s
Петр Узел
источник
7

Проверьте, поддерживает ли ваш вариант Unix учет процессов . Например, в Ubuntu (и большинстве других дистрибутивов Linux) это обеспечивается acctпакетом Install acct http://bit.ly/software-small . Если подсистема учета запущена и работает, lastcommотображается информация о завершенных процессах, в том числе о том, сколько процессорного времени они использовали (время настенных часов не записывается).

Если вам нужно время для конкретной программы, запустите ее черезtime .

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

Жиль "ТАК - прекрати быть злым"
источник
Этот ответ потерял свой имидж.
mattdm
@mattdm О, это ссылка, которая была стандартной в Ask Ubuntu для ссылки apt.ubuntu.com, а затем изображение было удалено из imgur. Должно быть, я использовал его сотни раз в SE, и я не рад возможности редактировать их все. Я до сих пор не могу позволить SE сделать автоматическую замену, чего они не будут делать, поскольку они даже не делали этого, когда вся документация Java была перенесена.
Жиль "ТАК - перестань быть злым"
1

Прежде чем я увидел эти вопросы и ответы на них, я сделал небольшой сценарий bash. Это все еще полезно, если у вас нет прав root и acct не установлен, или вы не вызываете свою команду напрямую (в моем случае: я использую графический интерфейс для настройки фоновых процессов). Вам нужно получить PID перед запуском (кто-нибудь хочет добавить его в скрипт? :)

#!/bin/bash

echo "Checking run time"
read -p "What is the pid? " PID

while true; do
    # sleep needed! used to reduce cpu usage and mass of output
    sleep 5
    ps -eo uid,pid,etime | egrep '$PID' | egrep '$UID'
done

С помощью этого найдите PID PROCESS_NAME

ps aux | awk 'NR == 1 || /PROCESS_NAME/'

На самом деле я попытался объединить USER-ID и PID, чтобы сделать скрипт не двусмысленным, но это не так просто ... ps -eo uid,pid,etime | egrep '$UID[[:space:]]$PID'кажется, не всегда работает ...

вещий
источник
Как раз то, что мне было нужно! Я обнаружил, что в Centos 6.8 мне нужно было опустить кавычки вокруг $ PID и пропустить, так egrep '$UID'как я единственный пользователь, подобный этому:ps -eo uid,pid,etime | egrep $PID
Крис Адамс