Come posso ottenere l'ora dell'orologio da parete di un processo in esecuzione?


14

Ho avviato un controllo hash di un file di grandi dimensioni e non voglio riavviarlo utilizzando time. Come posso ottenere l'ora dell'orologio da parete senza usare l'ora all'inizio o usare datesubito prima di invocare un comando?

Risposte:


12

Per un processo in esecuzione puoi fare questo:

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

Come funzionalità generale è possibile modificare il prompt della shell. Questa è la mia definizione di prompt di 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:> "

La parte rilevante per te è \tper il momento.

Questo, tuttavia, non risolve tutti i problemi. Il nuovo prompt mostrerà quando il processo è terminato ma il precedente prompt potrebbe essere stato piuttosto vecchio quando è stato avviato il comando da misurare. Quindi, o ti ricordi di rinnovare il prompt prima di avviare comandi a esecuzione prolungata o devi ricordare l'ora corrente quando vuoi sapere quanto tempo avrà impiegato il processo corrente.

Per una soluzione completa è necessaria una funzione di controllo (che registra l'ora di inizio e di fine dei processi). Ma ciò può causare un'enorme quantità di dati se non può essere limitato alla shell.


1

Sulla base della risposta accettata, è inoltre possibile monitorare continuamente il tempo trascorso di un processo in esecuzione utilizzando watch:

PID=5462
watch command ps -p "$PID" -o etime
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.