Gestion d'un processus en arrière plan
La commande wait permet au shell d'attendre la terminaison d'un processus lancé en arrière-plan.
Syntaxes :
Attendre la terminaison du processus dont le PID est donné en argument :
wait pid1
Attendre la terminaison de tous les processus lancés en arrière-plan à partir du shell courant :
wait
Attendre la terminaison du processus dont le numéro de job est donné en argument :
wait %job
Exemples :
La commande find est lançée en arrière-plan et a pour PID 2878 :
$ find / -name /etc/passwd 1>/tmp/resu 2>/dev/null &
[1] 2878
$ jobs
[1]+ Running find / -name /etc/passwd > /tmp/resu 2> /dev/null &
$
Le shell s'endort en attendant la terminaison du processus 2878 :
$ wait 2878 # Ou wait %1
Le shell est réveillé lorsque le processus 2878 est terminé :
$ .
[1]+ Exit 1 find / -name /etc/passwd > /tmp/resu 2> /dev/null
$
Le PID de la dernière commande lançée en arrière-plan est contenu dans la variable spéciale $!
Le script suivant lance en arrière-plan une recherche du fichier /etc/passwd (ligne 3).
D'autres actions peuvent être exécutées en attendant (ligne 5 à 8) puis le shell attend la fin de la recherche (ligne 9) avant d'afficher à l'écran le contenu du fichier /tmp/resu (ligne 12).
$ nl test_wait_1.sh
1 #!/bin/bash
2
3 find / -name /etc/passwd 1>/tmp/resu 2>&1 &
4 echo "Le PID du script lancé en arrière-plan est le : $!"
5 echo "Début des autres commandes"
6
7 echo "Fin des autres commandes"
8 echo "Recherche en cours - Attente de la fin de la recherche"
9 wait $!
10 echo "La recherche est terminée"
11 echo "Affichage du résultat"
12 most /tmp/resu
13 exit 0
$
$ ./test_wait_1.sh
Le PID du script lancé en arrière-plan est le : 11697
Début des autres commandes
Fin des autres commandes
Recherche en cours - Attente de la fin de la recherche
..... # Le shell s'endort
.....
La recherche est terminée
Affichage du résultat
$
Ajouter un commentaire