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
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.
$ ./sample.sh
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
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"
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
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
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
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
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.
Nous sommes reconnaissants de votre soutien sans fin.
.