Я начал проверку хеша большого файла и не хочу перезапускать его, используя time
. Как я могу получить время на настенных часах, не используя время в начале или date
прямо перед вызовом команды?
Для запущенного процесса вы можете сделать это:
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
это время.
Это не решает все проблемы, хотя. Новая подсказка покажет, когда процесс завершится, но прежняя подсказка, возможно, была довольно старой, когда была запущена измеряемая команда. Так что либо вы не забудьте обновить приглашение перед запуском длительных команд, либо вам нужно помнить текущее время, когда вы хотите знать, сколько времени займет текущий процесс.
Для полного решения вам нужна функция аудита (которая регистрирует время начала и окончания процессов). Но это может привести к огромному количеству данных, если они не могут быть ограничены оболочкой.
Опираясь на принятый ответ, вы также можете непрерывно отслеживать истекшее время запущенного процесса, используя watch
:
PID=5462
watch command ps -p "$PID" -o etime