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

14

Eu 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 o tempo no início ou usando date antes de invocar um comando?

    
por Dan S 29.04.2014 / 21:16

2 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 seu shell. Esta é a minha definição de prompt bash:

TERM_RED_START=$'3[1m3[31m'
TERM_RED_END=$'3(B3[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ê é \t do tempo.

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

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

    
por 29.04.2014 / 21:27
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
    
por 28.03.2016 / 17:08