Linux

Commande d'attente Bash

Commande d'attente Bash

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 :

  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 dormir commande pour émuler un processus d'arrière-plan fastidieux.
  3. $! 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 du dormir commander. Nous stockons le PID dans une variable (id_processus).
  4. Imprime le numéro PID.
  5. Le PID est transmis au attendre commande qui attend que le dormir la commande se termine.
  6. 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.

Meilleurs jeux à jouer avec le suivi des mains
Oculus Quest a récemment introduit l'idée géniale du suivi manuel sans contrôleurs. Avec un nombre toujours croissant de jeux et d'activités qui exécu...
Comment afficher la superposition OSD dans les applications et jeux Linux en plein écran
Jouer à des jeux en plein écran ou utiliser des applications en mode plein écran sans distraction peut vous couper des informations système pertinente...
Top 5 des cartes de capture de jeu
Nous avons tous vu et aimé des gameplays en streaming sur YouTube. PewDiePie, Jakesepticye et Markiplier ne sont que quelques-uns des meilleurs joueur...