Récemment, je travaillais sur un script shell et j’ai vu une différence significative dans la façon dont la variable spéciale bash $ et BASHPID se comporte. Chaque processus en cours d’exécution sous Linux sera affecté à un processus identifiant et c’est ainsi que le système d’exploitation gère le processus.

De même, votre session de terminal bash se verra également attribuer un ID de processus. Il existe une variable spéciale appelée "$" et "$BASHPID" qui stocke l’ID de processus du shell actuel.

Allez-y et exécutez la commande ci-dessous pour voir quel est l’ID de processus de votre shell actuel. Tous les deux "$" et "$BASHPID" va renvoyer la même valeur.

$ echo $$               # Printing special variable $
$ echo $BASHPID         # Printing the varibale $BASHPID
Rechercher L'Id De Processus Shell Actuel
Rechercher L&Rsquo;Id De Processus Shell Actuel

Dans bash, lorsque nous appelons un programme externe à partir du shell, cela créera un processus / sous-shell enfant et le programme sera soumis uniquement dans le processus enfant. Voir l’exemple ci-dessous où je mets une simple commande de moniteur de processus dans un script appelé « Sample.sh » pour montrer comment le shell parent crée un sous-shell pour exécuter le programme.

#!/usr/bin/env bash

ps -ef --forest | grep -i bash

Maintenant, en exécutant ce script, nous pouvons obtenir l’ID de processus de bash. À partir de l’image ci-dessous, vous pouvez comprendre quand j’ai appelé le script bash crée un processus enfant et exécute le script.

Publicité
$ ./sample.sh
Processus Enfant Linux
Processus Enfant Linux

Maintenant, utilisons les deux "$" et "$BASHPID" à l’intérieur du script et voyez ce qu’il renvoie.

#!/usr/bin/env bash
echo "============================"
ps -ef --forest | grep -i bash
echo "============================"
echo "PID USING $ FOR SCRIPT $0 ==> $$"
echo "PID USING BASHPID FOR SCRIPT $0 ==> $BASHPID"
echo

Maintenant, exécutez à nouveau le script.

$ ./sample.sh
Pid Du Processus Enfant
Pid Du Processus Enfant

Très bien, il renvoie le même ID de processus. Voici la différence réelle. Créons un autre processus enfant dans le script en exécutant une commande à l’intérieur parentheses().

# STORING THE PID INTO A VARIABLE…

VAR_HASH=$(echo $$)
VAR_BASHPID=$(echo $BASHPID)

echo "VALUE OF VAR_HASH ==> $VAR_HASH"
echo "VALUE OF VAR_BASHPID ==> $VAR_BASHPID"
Différence De Pid
Différence De Pid

En bash, Parenthèses invoquera un processus enfant et exécutera ce qui se trouve entre parenthèses. Dans ce cas, les deux $ et $BASHPID devrait stocker un nouvel ID de processus enfant. Mais à partir de l’image ci-dessus, vous pouvez voir qu’il y a une différence où $ magasins 382 qui est l’ID parent (ID de processus du script sample.sh), et $BASHPID stocke l’ID de processus enfant créé par des parenthèses.

Essayons maintenant de comprendre ce comportement. Nous verrons ce que dit la page de manuel.

$ man bash
Page Homme Pour $
Page Homme Pour $
Page De L'Homme Pour Bashpid
Page De L&Rsquo;Homme Pour Bashpid

Lorsque vous utilisez $, même dans un sous-shell, il stocke l’ID de processus du processus parent à partir duquel il a été créé. Mais BASHPID stockera l’ID de processus actuel, c’est-à-dire lorsqu’il sera appelé entre parenthèses, il stockera l’ID de processus enfant.

Nous ne pouvons pas affecter ou modifier la variable $, mais BASHPID peut être réaffecté mais n’a aucun effet.

$ $=10
$ BASHPID=10
$ echo $BASHPID
Affectation De Variable Bash
Affectation De Variable Bash

Il est possible de désactiver BASHPID. Lorsque vous le désélectionnez, il perd son état spécial et vous pouvez également commencer à l’utiliser comme variable normale.

$ unset BASHPID
$ echo $BASHPID
$ BASHPID="Tecmint"
$ echo $BASHPID
Annuler Bashpid
Annuler Bashpid

Même si vous essayez d’attribuer l’ID de processus du shell, il sera traité comme une variable définie par l’utilisateur car il a déjà perdu son état spécial.

$ BASHPID=$(echo $$)
$ echo $$;echo $BASHPID
Réattribution De Bashpid
Réattribution De Bashpid

Dans ce cas, vous devez utiliser une nouvelle session de terminal pour BASHPID pour obtenir son état spécial.

Voilà pour cet article. Nous avons vu la différence entre $ et BASHPID et comment ils se comportent dans cet article. Parcourez cet article et partagez vos précieux commentaires avec nous.

Si vous appréciez ce que nous faisons ici sur TecMint, vous devriez considérer:

TecMint est le site communautaire à la croissance la plus rapide et le plus fiable pour tout type d’articles, de guides et de livres Linux sur le Web. Des millions de personnes visitent TecMint! pour rechercher ou parcourir les milliers d’articles publiés disponibles GRATUITEMENT à tous.

Si vous aimez ce que vous lisez, pensez à nous acheter un café (ou 2) en guise de remerciement.

Soutenez-Nous

Nous sommes reconnaissants de votre soutien sans fin.

.

Rate this post
Publicité
Article précédentLes opérateurs télécoms coréens espèrent une nouvelle adoption de la 5G cette année
Article suivantObtenez 40% de réduction sur le HUAWEI Band 4e lors de sa promotion de lancement
Avatar
Violette Laurent est une blogueuse tech nantaise diplômée en communication de masse et douée pour l'écriture. Elle est la rédactrice en chef de fr.techtribune.net. Les sujets de prédilection de Violette sont la technologie et la cryptographie. Elle est également une grande fan d'Anime et de Manga.

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici