2010-01-08 16 views
9

Je suis débutant à la programmation shell bash. Pouvez-vous me parler des symboles '$$' dans le shell bash?

Si je effectuez les opérations suivantes

#> echo $$ 

imprime

#>18756 

Pouvez-vous me dire ce que ce symbole est utilisé et quand?

+0

Qu'est-ce qui est devenu la bonne vieille tradition de lire le bon manuel pour votre shell? – Jens

Répondre

16

C'est l'identifiant de processus du processus bash lui-même.

Vous pouvez l'utiliser pour suivre votre processus sur sa vie - utiliser ps -p pour voir si elle est toujours en cours d'exécution, envoyer un signal à l'aide kill (pour mettre en pause le processus par exemple), changer sa priorité avec renice, et ainsi de suite.

Les identifiants de processus sont souvent écrits dans des fichiers journaux, en particulier lorsque plusieurs instances d'un script s'exécutent simultanément, pour suivre les performances ou diagnostiquer des problèmes.

Voici the bash documentation décrivant les paramètres spéciaux.

BASHPID, mentionné par ghostdog74, a été ajouté à la version 4.0. Voici un exemple de Mendel Cooper Advanced Bash-Scripting Guide qui montre la différence entre $$ et $BASHPID:

#!/bin/bash4 

echo "\$\$ outside of subshell = $$" # 9602 
echo "\$BASH_SUBSHELL outside of subshell = $BASH_SUBSHELL" # 0 
echo "\$BASHPID outside of subshell = $BASHPID" # 9602 
echo 

(echo "\$\$ inside of subshell = $$" # 9602 
echo "\$BASH_SUBSHELL inside of subshell = $BASH_SUBSHELL" # 1 
echo "\$BASHPID inside of subshell = $BASHPID") # 9603 
# Note that $$ returns PID of parent process. 
+0

Ou vous pouvez vous connecter directement à la documentation officielle de Bash: http://www.gnu.org/software/bash/manual/bashref.html#Special-Parameters http://www.gnu.org/software/bash/manual /bashref.html#Shell-Variables – ephemient

+1

Bonne idée - fait, merci. –

1

si vous avez bash, un équivalent relativement proche est la variable BASHPID. Voir l'homme bash

BASHPID 
     Expands to the process id of the current bash process. This differs from $$ under certain circumstances, such as subshells 
     that do not require bash to be re-initialized. 
Questions connexes