Je veux savoir quand un processus en cours se terminera. Comment puis-je le regarder?

14

Je voudrais connaître toute commande que je peux exécuter pour connaître l'heure de fin d'un processus.

J'ai déjà lancé le processus et je connais son PID, mais je veux savoir s'il existe une commande qui peut me dire à quelle heure il s'est terminé.

Merci de votre aide.

user2504890
la source
7
Question interessante. Quoi qu'il en soit, la prochaine fois que vous exécuterez une commande qui prend beaucoup de temps, envisagez d'utiliser at(voir la page de manuel:) man at. Cela le mettra en file d'attente en tant que travail, vous serez averti quand il sera terminé, etc.
gertvdijk

Réponses:

11

Lance ça:

while kill -0 <PID>; do sleep 1; done; echo "Process finished at $(date +"%F %T")."

Ou vous pouvez créer un script bash. wait-for-death.sh:

#!/bin/bash

if ! kill -0 $1; then
    echo "Process $1 doesn't exist."
    exit 1
fi

while kill -0 $1; do
    sleep 1
done

echo "Process $1 finished at $(date +"%F %T")."

Donnez-lui ensuite l'autorisation d'exécution:

chmod +x wait-for-death.sh

et l'exécuter en passant le PID du processus:

./wait-for-death.sh <PID>
Eric Carvalho
la source
while kill -0 <pid>; do ...est plus portable - il fonctionnera également sur les systèmes non Linux. Et il n'y a aucune raison d'utiliser bash - votre code n'utilise aucun bashism, /bin/shc'est donc parfaitement bien ici.
Richard Hansen
1
@RichardHansen ce site concerne Ubuntu, ce n'est pas StackOverflow.
hytromo
@RichardHansen Merci pour kill -0, je pense que c'est une solution plus élégante.
Eric Carvalho
@hakermania: Je comprends, c'est pourquoi je lui ai toujours donné +1. Je montrais juste quelques façons de rendre le script plus portable au cas où quelqu'un voudrait faire la même chose sur un BSD / Solaris / etc. système. Je pense que c'est une bonne idée de s'en tenir à POSIX à moins qu'il n'y ait une raison de faire quelque chose de spécifique à Ubuntu. Dans ce cas, il n'y a aucune raison de ne pas écrire de script conforme POSIX.
Richard Hansen
2

Si vous souhaitez éviter les collisions PID, vous pouvez utiliser at:

job_id=$(at now <<< 'sleep 10' 2>&1 | awk 'END {print $2}')
while at -l | grep -q "^${job_id}\s"
do
    sleep 1
done
echo "Process finished at $(date)"
l0b0
la source
0

Peut-être que la commande timecorrespond à votre besoin:

time [options] command [arguments...]

Exemple:

time /local/usr/bin/myProcess arg1 arg2

Une fois le processus terminé time , des statistiques seront affichées, comme le temps nécessaire pour terminer le processus (en quelques secondes, je pense).

Consultez la page de manuel ou jetez simplement un œil à cette page de manuel en ligne .

roko
la source
OP a déclaré qu'il "avait déjà lancé le processus", ce timen'est donc pas une option.
Eric Carvalho