Utilisation de la commande wait pour synchroniser les processus
Dans cette étape, vous allez apprendre à utiliser la commande wait pour synchroniser les processus, en faisant attendre le processus parent jusqu'à la fin des processus en arrière-plan.
Qu'est-ce que la commande wait ?
La commande wait est utilisée dans les scripts shell pour suspendre l'exécution du script jusqu'à ce qu'un ou plusieurs processus en arrière-plan se soient terminés. Cela est particulièrement utile lorsque vous devez vous assurer que certaines tâches sont terminées avant de poursuivre les opérations suivantes.
Utilisation de wait sans arguments
Lorsqu'elle est utilisée sans arguments, la commande wait attend que tous les processus en arrière-plan se terminent.
Créons un script qui illustre cela :
-
Accédez au répertoire de votre projet :
cd ~/project
-
Créez un nouveau script :
nano wait_demo.sh
-
Ajoutez le contenu suivant au script :
#!/bin/bash
echo "Starting background tasks..."
## Start two background tasks
./long_task.sh &
./long_task.sh &
echo "Waiting for all background tasks to complete..."
wait
echo "All background tasks have completed!"
-
Enregistrez et quittez l'éditeur en appuyant sur Ctrl+O, puis Entrée, et enfin Ctrl+X.
-
Rendez le script exécutable :
chmod +x wait_demo.sh
-
Exécutez le script :
./wait_demo.sh
Vous verrez une sortie similaire à :
Starting background tasks...
Starting long task with PID 1236
Starting long task with PID 1237
Waiting for all background tasks to complete...
Long task completed
Long task completed
All background tasks have completed!
Notez que le message "All background tasks have completed!" n'apparaît que après que les deux longues tâches se sont terminées. Cela montre comment la commande wait suspend le script jusqu'à ce que tous les processus en arrière-plan se terminent.
Utilisation de wait avec un PID spécifique
Vous pouvez également utiliser wait pour attendre qu'un processus spécifique se termine en fournissant son PID :
-
Créez un autre script :
nano wait_pid_demo.sh
-
Ajoutez le contenu suivant :
#!/bin/bash
echo "Starting background tasks..."
## Start two background tasks and capture their PIDs
./long_task.sh &
pid1=$!
./long_task.sh &
pid2=$!
echo "First process PID: $pid1"
echo "Second process PID: $pid2"
echo "Waiting for the first task to complete..."
wait $pid1
echo "First task has completed!"
echo "Waiting for the second task to complete..."
wait $pid2
echo "Second task has completed!"
-
Enregistrez et quittez l'éditeur en appuyant sur Ctrl+O, puis Entrée, et enfin Ctrl+X.
-
Rendez le script exécutable :
chmod +x wait_pid_demo.sh
-
Exécutez le script :
./wait_pid_demo.sh
La sortie montrera que le script attend chaque processus individuellement.
La variable $! contient le PID du dernier processus en arrière-plan exécuté. Cela vous permet de capturer et d'utiliser ultérieurement le PID avec la commande wait.