Apprenez la différence entre $$ et $ Bashpid dans Bash

Apprenez la différence entre $$ et $ Bashpid dans Bash

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.

Lecture connexe: Apprenez la différence entre l'approvisionnement et la fourniture de bash

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 $ bashpid 
Trouver 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.shot 
Processus 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.shot 
Pid 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 bash 
Page 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 $ bashpid 
Affectation 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 $ bashpid 
Non-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 $ bashpid 
Ré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.