¿Cómo puedo obtener el tiempo de reloj de pared de un proceso en ejecución?

14

Comencé una comprobación hash de un archivo grande y no quiero reiniciarlo usando time. ¿Cómo puedo obtener la hora del reloj de pared sin usar el tiempo al principio o datejusto antes de invocar un comando?

Dan S
fuente

Respuestas:

12

Para un proceso en ejecución puede hacer esto:

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

Como característica general, puede modificar su solicitud de shell. Esta es mi definición de bash prompt:

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:> "

La parte relevante para ti es la \tdel momento.

Sin embargo, esto no resuelve todos los problemas. La nueva solicitud se mostrará cuando el proceso haya finalizado, pero la solicitud anterior puede haber sido bastante antigua cuando se inició el comando a medir. Por lo tanto, recuerde renovar la solicitud antes de iniciar comandos de ejecución prolongada o debe recordar la hora actual en la que desea saber cuánto tiempo llevará el proceso actual.

Para una solución completa, necesita una función de auditoría (que registra el tiempo de inicio y finalización de los procesos). Pero eso puede causar una gran cantidad de datos si no se puede restringir al shell.

Hauke ​​Laging
fuente
1

Sobre la base de la respuesta aceptada, también puede monitorear continuamente el tiempo transcurrido de un proceso en ejecución usando watch:

PID=5462
watch command ps -p "$PID" -o etime
Landroni
fuente