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 date
antes de chamar um comando?
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 \t
do 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.
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