Comment puis-je obtenir l'heure de l'horloge murale d'un processus en cours?

14

J'ai commencé une vérification de hachage d'un fichier volumineux et je ne veux pas le redémarrer à l'aide time. Comment puis-je obtenir l'heure de l'horloge murale sans utiliser l'heure au début ou utiliser datejuste avant d'invoquer une commande?

Dan S
la source

Réponses:

12

Pour un processus en cours, vous pouvez faire ceci:

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

En règle générale, vous pouvez modifier votre invite de shell. Voici ma définition d'invite 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 partie qui vous intéresse est celle \tdu moment.

Cela ne résout cependant pas tous les problèmes. La nouvelle invite affichera la fin du processus, mais l'ancienne invite peut être assez ancienne lorsque la commande à mesurer a été lancée. Donc, soit vous vous souvenez de renouveler l'invite avant de lancer de longues commandes, soit vous devez vous souvenir de l'heure actuelle lorsque vous voulez savoir combien de temps le processus actuel aura pris.

Pour une solution complète, vous avez besoin d'une fonction d'audit (qui enregistre l'heure de début et de fin des processus). Mais cela peut provoquer une énorme quantité de données si elles ne peuvent pas être limitées au shell.

Hauke ​​Laging
la source
1

En vous appuyant sur la réponse acceptée, vous pouvez également surveiller en continu le temps écoulé d'un processus en cours en utilisant watch:

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