Gestion d'un processus en arrière plan

Gestion d'un processus en arrière plan

By ronan, 26 novembre, 2011

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
$