1 : Dans bash, $!
contient le PID du dernier processus d'arrière-plan qui a été exécuté. Cela vous indiquera le processus à surveiller, de toute façon.
4 : wait <n>
attend que le processus avec PID <n>
est terminé (il bloquera jusqu'à ce que le processus soit terminé, donc vous ne voudrez peut-être pas l'appeler avant d'être sûr que le processus est terminé), et renvoie ensuite le code de sortie du processus terminé.
2, 3 : ps
o ps | grep " $! "
peut vous dire si le processus est toujours en cours. C'est à vous de comprendre la sortie et de décider s'il est sur le point de se terminer. ( ps | grep
n'est pas à toute épreuve. Si vous avez le temps, vous pouvez trouver un moyen plus robuste de savoir si le processus est toujours en cours d'exécution).
Voici un squelette de script :
# simulate a long process that will have an identifiable exit code
(sleep 15 ; /bin/false) &
my_pid=$!
while ps | grep " $my_pid " # might also need | grep -v grep here
do
echo $my_pid is still in the ps output. Must still be running.
sleep 3
done
echo Oh, it looks like the process is done.
wait $my_pid
# The variable $? always holds the exit code of the last command to finish.
# Here it holds the exit code of $my_pid, since wait exits with that code.
my_status=$?
echo The exit status of the process was $my_status
2 votes
...et le gagnant est ?
4 votes
@TrueY bob ne s'est pas connecté depuis le jour où il a posé la question. Il est peu probable que nous le sachions jamais !