GNU/Linux >> Tutoriels Linux >  >> Linux

Commande Wait sous Linux avec des exemples

Wait est une commande shell qui attend la fin d'un processus donné, puis renvoie son état de sortie. La commande Wait est utilisée pour attendre l'ID de processus et l'ID de travail particuliers et renvoyer leur état de terminaison.

Lors de l'exécution du grand flux d'automatisation, nous devons faire en sorte que quelques modules attendent la fin de l'ensemble de modules précédent et renvoient les données canalisées dans les modules suivants. Dans ce cas, nous pouvons utiliser la commande Wait jusqu'à ce que le module précédent soit terminé.

Comment fonctionne la commande d'attente

La commande d'attente utilisée pour surveiller le processus précédent dépend de l'état de retour du processus précédent, elle renverra l'état de sortie. Par exemple, si nous voulons attendre pour terminer un ID de processus particulier 13245, nous devons utiliser "wait 13245" lorsque la commande d'attente complète du processus 13245 renvoie les valeurs de retour de l'état de sortie 13245.

- wait PID (PID - ID de processus d'une commande, pour laquelle l'utilitaire doit attendre la fin).
- wait JID (JID - Job ID qui identifie un processus d'arrière-plan à attendre, applicable uniquement pour les appels d'attente dans l'environnement d'exécution du shell actuel).

La valeur de l'état de sortie de la commande d'attente dépend du dernier PID/JID spécifié. Lorsqu'un processus se termine anormalement, le statut de sortie sera supérieur à 128.

La commande Wait se termine avec la valeur 0 lorsqu'il appelle sans processus enfant et que tous les ID de processus sont connus par le shell actuel, ils se sont terminés. Si la commande d'attente détecte une erreur, elle renvoie une valeur comprise entre 1 et 126. Si le dernier identifiant de processus est inconnu, la commande d'attente se termine avec la valeur 127.

Exemples de commandes d'attente

Vérifions quelques scripts pour comprendre le fonctionnement de la commande d'attente.

Exemple :1 – Script avec la commande Wait

Nous avons deux scripts appelés scripts 'foo.sh' et 'bar.sh'. Le script 'Foo.sh' imprime les numéros entre 1 et 5 et le script 'bar.sh' appellera le foo.sh et l'exécutera en arrière-plan, obtiendra le PID de foo.sh et attendra qu'il se termine, une fois terminé, il le fera démarrer la boucle 'bar.sh' et terminer.

Script – foo.sh

#!/bin/bash
for i in 1 2 3 4 5
do
      echo “foo.sh – Looping … number $i”
done

Script – bar.sh

#!/bin/bash
echo “Started bar.sh”
echo “Started foo.sh”
./foo.sh &
pid=$!
wait $pid
echo “Completed foo.sh”

for I in 1 2 3 4 5
do
        echo “bar.sh – Looping … number $i”
done

Résultat

Started bar.sh
Started foo.sh
foo.sh – Looping .. number 1
foo.sh – Looping .. number 2
foo.sh – Looping .. number 3
foo.sh – Looping .. number 4
foo.sh – Looping .. number 5
Completed foo.sh
bar.sh – Looping .. number 1
bar.sh – Looping .. number 2
bar.sh – Looping .. number 3
bar.sh – Looping .. number 4
bar.sh – Looping .. number 5
Completed bar.sh
$

Exemple 2 – Script sans commande d'attente

Nous avons deux scripts appelés scripts 'foo.sh' et 'bar.sh'. Le script 'foo.sh' imprime des nombres compris entre 1 et 5 et le script bar.sh appellera foo.sh et l'exécutera en arrière-plan, mais il n'attendra pas que foo.sh se termine et exécute les deux scripts.

Script – foo.sh

#!/bin/bash
for i in 1 2 3 4 5
do
      echo “foo.sh – Looping … number $i”
done

Script – bar.sh

#!/bin/bash
echo “Started bar.sh”
echo “Started foo.sh”
./foo.sh &
echo “Completed foo.sh”

for I in 1 2 3 4 5
do
        echo “bar.sh – Looping … number $i”
done

Résultat

Started bar.sh
Started foo.sh
Completed foo.sh
bar.sh – Looping .. number 1
bar.sh – Looping .. number 2
bar.sh – Looping .. number 3
bar.sh – Looping .. number 4
bar.sh – Looping .. number 5
Completed bar.sh
$
foo.sh – Looping .. number 1
foo.sh – Looping .. number 2
foo.sh – Looping .. number 3
foo.sh – Looping .. number 4
foo.sh – Looping .. number 5
$

Exemple :3 – Script avec commande d'attente et état de retour

Le script 'bar.sh' appellera le foo.sh et l'exécutera en arrière-plan, obtiendra le PID de foo.sh et attendra qu'il se termine, une fois terminé, il démarrera la boucle bar.sh et se terminera, enfin, il renverra le code de sortie du script foo.sh.

Script – foo.sh (état de sortie =0)

Script - foo.sh

#!/bin/bash
for i in 1 2 3 4 5
do
      echo “foo.sh – Looping … number $i”
done

Script – bar.sh

#!/bin/bash
./foo.sh &
BPID=$!
wait $BPID
stat=$?

if [ $stat –eq 0 ]
then
       echo “Exit status - $stat”
else
        echo “Exit status - $stat”
fi

Résultat

foo.sh – Looping .. number 1
foo.sh – Looping .. number 2
foo.sh – Looping .. number 3
foo.sh – Looping .. number 4
foo.sh – Looping .. number 5
Exit status - 0
$

Script - foo.sh (état de sortie =NON zéro)

Script - foo.sh

#!/bin/bash
for i in 1 2 3 4 5
do
      iiecho “foo.sh – Looping … number $i”
done

Script – bar.sh

#!/bin/bash
./foo.sh &
BPID=$!
wait $BPID
stat=$?

if [ $stat –eq 0 ]
then
       echo “Exit status - $stat”
else
        echo “Exit status - $stat”
fi

Résultat

./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
Exit status – 127
$

Conclusion

Wait et Sleep sont tous deux des appels système basés sur le temps dans le système d'exploitation. Vérifions la différence entre les commandes wait et sleep.

Attendre :Lorsque l'utilisateur veut arrêter le processus en cours et qu'il libère toutes les ressources détenues par le processus et attend qu'un autre processus s'exécute. Nous devons utiliser la notification pour informer ce processus que l'exécution recommence à la fin d'un autre processus.

Veille :cet appel système est utilisé lorsque l'utilisateur souhaite interrompre le processus en cours pendant un certain temps. Il maintient les verrous sur les ressources jusqu'à la fin du temps de sommeil et recommence l'exécution du processus. Ici, le processus a le contrôle tout au long de l'exécution. Par exemple, j'ai exécuté une commande sur bash et je veux dormir pendant un certain temps car j'attends une sortie de la commande exécutée qui sera utilisée dans l'exécution ultérieure du processus en cours.


Linux
  1. Commande Linux wc avec exemples

  2. Commande de tri Linux avec exemples

  3. Commande Linux Tee avec exemples

  4. Commande principale Linux avec exemples

  5. Commande JQ sous Linux avec exemples

Commande de CD Linux avec exemples

Commande Linux watch avec exemples

La commande Wait sous Linux expliquée avec des exemples

Commande d'exportation Linux avec exemples

Commande IP Linux avec exemples

La commande Wait sous Linux expliquée avec des exemples pratiques