<Précédent | Table des matières | Suivant>
attendez
Nous allons démontrer le attendez commande en premier. Pour ce faire, nous aurons besoin de deux scripts, un script parent :
#! / Bin / bash
# async-parent : Démo d'exécution asynchrone (parent) echo "Parent : démarrage..."
echo "Parent : lancement du script enfant..." async-child &
pid=$ !
echo "Parent : enfant (PID= $pid) lancé."
echo "Parent : continue..." sommeil 2
echo "Parent : pause pour attendre la fin de l'enfant..." wait $pid
echo "Parent : l'enfant a terminé. Continuation..." echo "Parent : le parent a terminé. Sortie."
#! / Bin / bash
# async-parent : Démo d'exécution asynchrone (parent) echo "Parent : démarrage..."
echo "Parent : lancement du script enfant..." async-child &
pid=$ !
echo "Parent : enfant (PID= $pid) lancé."
echo "Parent : continue..." sommeil 2
echo "Parent : pause pour attendre la fin de l'enfant..." wait $pid
echo "Parent : l'enfant a terminé. Continuation..." echo "Parent : le parent a terminé. Sortie."
et un script enfant :
#! / Bin / bash
# async-child : démo d'exécution asynchrone (enfant) echo "Enfant : l'enfant est en cours d'exécution..."
sommeil 5
echo "Enfant : l'enfant a terminé. Sortie."
#! / Bin / bash
# async-child : démo d'exécution asynchrone (enfant) echo "Enfant : l'enfant est en cours d'exécution..."
sommeil 5
echo "Enfant : l'enfant a terminé. Sortie."
Dans cet exemple, nous voyons que le script enfant est très simple. L'action réelle est effectuée par le parent. Dans le script parent, le script enfant est lancé et mis en arrière-plan. L'ID de processus du script enfant est enregistré en attribuant le Pid variable avec la valeur de $! paramètre shell, qui contiendra toujours l'ID de processus du dernier travail mis en arrière-plan.
Le script parent continue puis exécute un attendez avec le PID du processus fils. Cela provoque la pause du script parent jusqu'à ce que le script enfant se termine, moment auquel le script parent se termine.
Lorsqu'ils sont exécutés, les scripts parent et enfant produisent la sortie suivante :
[moi@linuxbox ~]$ parent asynchrone
Parent : à partir de...
[moi@linuxbox ~]$ parent asynchrone
Parent : à partir de...
Exécution asynchrone
Parent : lancement du script enfant... Parent : enfant (PID= 6741) lancé. Parent : suite...
Enfant : l'enfant court...
Parent : pause pour attendre la fin de l'enfant... Enfant : l'enfant a terminé. Sortie.
Parent : l'enfant a fini. Continuer... Parent : le parent a terminé. Sortie.
Parent : lancement du script enfant... Parent : enfant (PID= 6741) lancé. Parent : suite...
Enfant : l'enfant court...
Parent : pause pour attendre la fin de l'enfant... Enfant : l'enfant a terminé. Sortie.
Parent : l'enfant a fini. Continuer... Parent : le parent a terminé. Sortie.