attendre
est une commande qui attend la fin des travaux donnés et renvoie l'état de sortie de la commande attendue.
Depuis le attendre
La commande affecte l'environnement d'exécution du shell actuel, elle est implémentée en tant que commande intégrée dans la plupart des shells.
Dans cet article, nous allons explorer le Bash intégré attendre
commander.
Frapper attendre
Commande #
La syntaxe générale du attendre
intégré prend la forme suivante :
attendre [options] ID
identifiant
est l'ID du processus ou de la tâche. Sinon identifiant
est spécifié, la commande attend que toutes les tâches d'arrière-plan enfants soient terminées.
le attendre
commande renvoie l'état de sortie de la dernière commande attendue.
Par exemple, pour attendre un processus en arrière-plan avec PID 7654
, tu utiliserais :
attendre 7654
Lorsque plusieurs processus sont donnés, la commande attend que tous les processus se terminent.
Les tâches sont spécifiées à l'aide de la spécification de tâche (« jobspec »), qui est un moyen de faire référence aux processus qui composent la tâche. Une spécification de tâche commence par un symbole de pourcentage suivi du numéro de tâche (%n
). Voici un exemple:
Exécutez une commande en arrière-plan :
rsync -a /home /tmp/home &
L'ID de la tâche shell (entouré de crochets) et l'ID du processus s'afficheront sur votre terminal :
[2] 54377
Pour attendre le travail, exécutez le attendre
commande suivie de la spécification du travail :
attendre %2
Lorsqu'il est invoqué avec le -m
option, la commande n'attend qu'un seul travail des pids ou des spécifications de travail donnés pour se terminer et renvoie son état de sortie. Si aucun argument n'est fourni, attendre -n
attend la fin d'une tâche en arrière-plan et renvoie l'état de sortie de la tâche.
attendre -n 45432 54346 76573
Dans l'exemple ci-dessus, attendre -n
imprime uniquement l'état de retour du travail qui se termine en premier ; il n'affiche pas le PID du travail. Si vous souhaitez obtenir le pid ou la spécification du travail pour lequel l'état de sortie est renvoyé, utilisez le -p
option pour l'affecter à une variable :
attendre -p job_id -n 45432 54346 76573
-p
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
option dit attendre
attendre que chaque pid ou jobspec se termine réellement avant de renvoyer son code de sortie, plutôt que de revenir lorsque le statut du travail est modifié. Cette option n'est valide que lorsque le contrôle des tâches est activé. Par défaut, le contrôle des tâches est activé uniquement pour les invites interactives.
Exemples #
attendre
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 "État de sortie : $?"
Expliquons le code ligne par ligne :
- La première ligne s'appelle shebang et indique au système d'exploitation quel interpréteur utiliser pour analyser le reste du fichier.
- Nous utilisons le
dormir
commande pour émuler un processus d'arrière-plan fastidieux. $!
est une variable Bash interne qui stocke le PID du dernier travail exécuté en arrière-plan. Dans cet exemple, il s'agit du PID dudormir
commander. Nous stockons le PID dans une variable (id_processus
).- Imprime le numéro PID.
- Le PID est transmis au
attendre
commande qui attend que ledormir
la commande se termine. - Imprime l'état de sortie du
attendre
commander.$?
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 État de sortie : 0
Voici un exemple utilisant le -m
option:
#!/bin/bash sleep 3 & sleep 30 & sleep 5 & wait -n echo "Premier travail terminé." wait echo "Tous les travaux sont terminés."
Lorsque le script est exécuté, il génère 3 processus d'arrière-plan. attendre -n
attend que le premier travail soit terminé et que l'instruction echo soit imprimée. attendre
attend la fin de toutes les tâches d'arrière-plan enfants.
premier travail terminé tous les travaux terminés
Le dernier exemple explique le -F
option. Ouvrez le terminal et exécutez :
dormir 3600 &
[1] 46671
Attendez le processus :
attendre 46671
Ouvrez un autre terminal et arrêtez le processus avec le tuer
commander:
tuer -STOP 46671
Une fois le statut du processus modifié, le attendre
La commande se terminera et renverra le code de sortie du processus.
Maintenant, répétez les mêmes étapes, mais cette fois, utilisez attendre -f $pid
:
dormir 3600 &
attendre -f 46671
Arrêtez le processus depuis l'autre terminal :
tuer -STOP 46671
Cette fois le attendre
la commande ne se terminera pas. Il fonctionnera jusqu'à ce que le dormir
le processus se termine.
Conclusion #
le attendre
La commande attend la fin des travaux spécifiés et renvoie le code de sortie du travail.
Si vous avez des questions ou des commentaires, n'hésitez pas à laisser un commentaire.