Як перевірити, як довго тривав процес після його закінчення?


14

В даний час я використовую наступне, щоб перевірити, як довго процес працює насправді:

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

І це дає наступне:

MY_ID PID_OF_PROCESS       00:16

Однак після закінчення процесу я хочу з’ясувати, скільки часу він насправді тривав, але я не можу знайти цю інформацію.

Відповіді:


15

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

Якщо ви заздалегідь знаєте, що вам потрібна ця інформація, ви можете запустити команду як

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 робила автоматизовану заміну, чого вони не робитимуть, оскільки вони навіть цього не зробили, коли вся документація Java переїхала.
Жил "ТАК - перестань бути злим"

1

Перш ніж я побачив це питання та його відповіді, я склав невеликий сценарій. Це все ще корисно, якщо у вас немає прав на root і acct не встановлений або ви не викликаєте свою команду безпосередньо (у моєму випадку: я використовую gui для налаштування фонових процесів). Потрібно отримати 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
Кріс Адамс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.