Как я могу получить время настенных часов запущенного процесса?


14

Я начал проверку хеша большого файла и не хочу перезапускать его, используя time. Как я могу получить время на настенных часах, не используя время в начале или dateпрямо перед вызовом команды?

Ответы:


12

Для запущенного процесса вы можете сделать это:

PID=5462
command ps -p "$PID" -o etime
command ps -p "$PID" --no-headers -o etime

В качестве общей функции вы можете изменить приглашение командной строки. Это моё определение для bash:

TERM_RED_START=$'\033[1m\033[31m'
TERM_RED_END=$'\033(B\033[m'
PS1='\nec:$(ec=$?; if [ 0 -eq $ec ];
then printf %-3d $ec;
else echo -n "$TERM_RED_START"; printf %-3d $ec; echo "$TERM_RED_END";
fi) \t  \u@\h:\w\nstart cmd:> '
PS2="cont. cmd:> "

Важная часть для вас - \tэто время.

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

Для полного решения вам нужна функция аудита (которая регистрирует время начала и окончания процессов). Но это может привести к огромному количеству данных, если они не могут быть ограничены оболочкой.


1

Опираясь на принятый ответ, вы также можете непрерывно отслеживать истекшее время запущенного процесса, используя watch:

PID=5462
watch command ps -p "$PID" -o etime
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.