Apprenez la différence entre $$ et $ Bashpid dans Bash
- 4096
- 583
- Anaïs Charles
Récemment, je travaillais sur un script shell et j'ai vu une différence significative dans la façon dont Bash Special Variable $
et Bashpid
se comporter. Chaque processus exécuté dans Linux sera attribué avec 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 sera également attribuée avec un identifiant de processus. Il y a 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. Les deux "$"
et "$ Bashpid"
va retourner la même valeur.
$ echo $$ # Impression spéciale variable $ $ echo $ bashpid # imprimer le varibale $ bashpidTrouver l'ID de processus du shell actuel
Dans Bash, lorsque nous appelons un programme externe de la coquille, il créera un processus / sous-coquille d'enfant et le programme sera soumis dans le processus enfant uniquement. Voir l'exemple ci-dessous où j'ai mis une commande de moniteur de processus simple dans un script appelé "goûter.sh ” Pour démontrer comment le Shell Parent crée une sous-coquille 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 d'enfant et exécuter le script.
$ ./goûter.shotProcessus d'enfant Linux
Maintenant utilisons les deux "$"
et "$ Bashpid"
à l'intérieur du script et voir ce qu'il renvoie.
#!/ usr / bin / env bash echo "==========================" PS -ef --Forest | grep -i bash echo "============================" Echo "Pid Using $ for Script $ 0 ==> $$" "PID Utilisation de Bashpid pour le script 0 0 ==> $ BASHPID" Echo
Maintenant, exécutez le script.
$ ./goûter.shotPid of Child Process
Très bien, il renvoie le même ID de processus. Voici la différence réelle. Créons un autre processus d'enfant à l'intérieur du script en exécutant une commande à l'intérieur parenthèses ()
.
# Stockage du PID dans une variable… var_hash = $ (echo $$) var_bashpid = $ (echo $ bashpid) echo "valeur de var_hash ==> $ var_hash" echo "valeur de var_bashpid ==> $ var_bashpid"Différence de PID
Bas, Parenthèses invoquera un processus d'enfant et exécutera tout ce qui arrive entre les parenthèses. Dans ce cas, les deux $
et $ Bashpid
devrait stocker un nouvel identifiant 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 goûter.shot), et $ Bashpid
stocke l'ID de processus d'enfant créé créé par parenthèses.
Essayons maintenant de comprendre ce comportement. Nous verrons ce que dit la page de l'homme.
$ man bashPage man pour $ Page homme pour le bashpid
Lorsque vous utilisez $
, Même dans une sous-coquille, il stocke l'identifiant de processus du processus parent où il a été créé. Mais Bashpid
rangera l'ID de processus actuel, je.E Lorsqu'il est appelé entre parenthèses, il stockera l'ID de processus de l'enfant.
Nous ne pouvons pas affecter ou modifier la variable $
, mais Bashpid
peut être réaffecté mais il n'a aucun effet.
$ $ = 10 $ bashpid = 10 $ echo $ bashpidAffectation de la variable de bash
Il est possible de ne pas set Bashpid. Lorsque vous vous ne êtes pas défini, il perd son état spécial et vous pouvez également commencer à l'utiliser comme variable normale.
$ unset bashpid $ echo $ bashpid $ bashpid = "tecmint" $ echo $ bashpidNon-set 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 elle a déjà perdu son état spécial.
$ Bashpid = $ (echo $$) $ echo $$; echo $ bashpidRéaffectation de Bashpid
Dans ce cas, vous devez utiliser une nouvelle session de terminal pour Bashpid Pour obtenir son état spécial.
C'est tout 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.
- « Comment corriger la partition NTFS n'a pas réussi à monter l'erreur dans Linux
- Comment installer et configurer le serveur OpenVPN dans CentOS 8/7 »