GNU/Linux >> Tutoriels Linux >  >> Linux

Commande d'attente bash

wait est une commande qui attend la fin des travaux donnés et renvoie l'état de sortie de la commande attendue.

Depuis le wait affecte l'environnement d'exécution actuel du shell, elle est implémentée en tant que commande intégrée dans la plupart des shells.

Dans cet article, nous allons explorer le wait intégré à Bash commande.

Bash wait Commande #

La syntaxe générale du wait intégré prend la forme suivante :

wait [options] ID

ID est l'ID du processus ou de la tâche. Si aucun ID est spécifié, la commande attend que toutes les tâches d'arrière-plan enfants soient terminées.

Le wait commande renvoie l'état de sortie de la dernière commande attendue.

Par exemple, pour attendre un processus en arrière-plan avec le PID 7654 , vous utiliseriez :

wait 7654

Lorsque plusieurs processus sont donnés, la commande attend que tous les processus soient terminés.

Les travaux sont spécifiés à l'aide de la spécification de travail ("jobspec"), qui est un moyen de se référer aux processus qui composent le travail. Une spécification de travail commence par un symbole de pourcentage suivi du numéro de travail (%n ). Voici un exemple :

Exécutez une commande en arrière-plan :

rsync -a /home /tmp/home &

L'ID de tâche shell (entouré de crochets) et l'ID de processus s'afficheront sur votre terminal :

[2] 54377

Pour attendre le travail, exécutez le wait commande suivie de la spécification du travail :

wait %2

Lorsqu'il est invoqué avec le -n option, la commande n'attend qu'un seul travail à partir des pid ou des spécifications de travail donnés pour se terminer et renvoie son état de sortie. Si aucun argument n'est fourni, wait -n attend la fin d'une tâche en arrière-plan et renvoie l'état de sortie de la tâche.

wait -n 45432 54346 76573

Dans l'exemple ci-dessus, wait -n imprime uniquement l'état de retour du travail qui sort en premier ; il ne montre pas le PID du travail. Si vous souhaitez obtenir le pid ou la spécification de travail pour lequel le statut de sortie est renvoyé, utilisez le -p possibilité de l'affecter à une variable :

wait -p job_id -n 45432 54346 76573

-p L'option a été introduite dans Bash 5.1. Si vous utilisez une ancienne version de Bash, vous obtiendrez une erreur "option non valide".

Le -f l'option indique wait d'attendre que chaque pid ou jobspec se termine réellement avant de renvoyer son code de sortie, plutôt que de revenir lorsque l'état du travail est modifié. Cette option n'est valide que lorsque le contrôle des travaux est activé. Par défaut, le contrôle des tâches est activé uniquement pour les invites interactives.

Exemples #

wait est généralement utilisé dans les scripts shell qui génèrent des processus enfants qui s'exécutent en parallèle.

Pour illustrer le fonctionnement de la commande, créez le script suivant :

#!/bin/bash
sleep 30 &
process_id=$!
echo "PID: $process_id"
wait $process_id
echo "Exit status: $?"

Expliquons le code ligne par ligne :

  1. La première ligne s'appelle shebang et indique au système d'exploitation quel interpréteur utiliser pour analyser le reste du fichier.
  2. Nous utilisons le sleep commande pour émuler un processus d'arrière-plan chronophage.
  3. $! est une variable Bash interne qui stocke le PID de la dernière tâche exécutée en arrière-plan. Dans cet exemple, c'est le PID du sleep commande. Nous stockons le PID dans une variable (process_id ).
  4. Imprime le numéro PID.
  5. Le PID est passé au wait commande qui attend jusqu'à ce que sleep la commande se termine.
  6. Imprime le statut de sortie de l'wait commande. $? est une variable Bash interne qui contient l'état de sortie de la dernière commande exécutée.

Si vous exécutez le script, il affichera quelque chose comme ceci :

PID: 36353
Exit status: 0

Voici un exemple utilisant le -n choix :

#!/bin/bash
sleep 3 &
sleep 30 &
sleep 5 &
wait -n
echo "First job completed."
wait
echo "All jobs completed."

Lorsque le script est exécuté, il génère 3 processus d'arrière-plan. wait -n attend que le premier travail soit terminé et que l'instruction echo soit imprimée. wait attend que toutes les tâches d'arrière-plan enfants soient terminées.

first job completed
all jobs completed

Le dernier exemple explique le -f option. Ouvrez le terminal et exécutez :

sleep 3600 &
[1] 46671

Attendez le processus :

wait 46671

Ouvrez un autre terminal et arrêtez le processus avec le kill commande :

kill -STOP 46671

Une fois le statut du processus modifié, le message wait la commande se terminera et renverra le code de sortie du processus.

Maintenant, répétez les mêmes étapes, mais cette fois utilisez wait -f $pid :

sleep 3600 &wait -f 46671

Arrêtez le processus depuis l'autre terminal :

kill -STOP 46671

Cette fois, le wait la commande ne se terminera pas. Il fonctionnera jusqu'à la sleep le processus se termine.

Conclusion #

Le wait La commande attend que les tâches spécifiées se terminent et renvoie le code de sortie de la tâche.


Linux
  1. La commande "eval" dans Bash ?

  2. démarrer apachectl à partir de bash

  3. bash sh - commande introuvable

  4. Bash - Commande de date et espace

  5. Exécutez la commande bash sur le pipeline jenkins

Commande d'historique sous Linux (historique de bash)

Commande de sortie Bash et codes de sortie

Commande Bash printf

Commande Wait sous Linux avec des exemples

Script bash (II)

Script bash (III)