Como posso obter a hora do relógio de parede de um processo em execução?

14

Iniciei uma verificação de hash de um arquivo grande e não quero reiniciá-lo usando time. Como posso obter a hora do relógio de parede sem usar a hora no início ou dateantes de chamar um comando?

Dan S
fonte

Respostas:

12

Para um processo em execução, você pode fazer isso:

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

Como um recurso geral, você pode modificar o prompt do shell. Esta é a minha definição de prompt do 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:> "

A parte relevante para você é a \tdo tempo.

Isso não resolve todos os problemas, no entanto. O novo prompt mostrará quando o processo terminou, mas o prompt anterior pode ter sido bastante antigo quando o comando a ser medido foi iniciado. Portanto, lembre-se de renovar o prompt antes de iniciar comandos de execução longa ou lembre-se do horário atual em que deseja saber quanto tempo o processo atual levará.

Para uma solução completa, você precisa de um recurso de auditoria (que registra o horário de início e término dos processos). Mas isso pode causar uma enorme quantidade de dados, se não puder ser restrito ao shell.

Hauke ​​Laging
fonte
1

Com base na resposta aceita, você também pode monitorar continuamente o tempo decorrido de um processo em execução usando watch:

PID=5462
watch command ps -p "$PID" -o etime
landroni
fonte