web-dev-qa-db-fra.com

Comment un script Linux/Unix Bash connaît-il son propre PID?

J'ai un script dans Bash appelé Script.sh, et il doit connaître son propre PID (c'est-à-dire que je dois obtenir le PID dans le fichier Script.sh). 

Une idée comment faire ça?

117
Debugger

La variable '$$' contient le PID.

191
Paul Tomblin

utilisez $BASHPID ou $$

Voir le manuel pour plus d'informations, y compris sur les différences entre les deux.

TL; DRTFM

  • $$ Développe l'ID de processus du shell .
    • Dans un sous-shell (), il se développe en identifiant de processus du Shell appelant, pas du sous-shell. 
  • $BASHPID Développe l'ID de processus du processus Bash en cours .
    • Dans un sous-shell (), il se développe en ID de processus du sous-shell. 
45
tvanfosson

En plus de l'exemple donné dans Guide de rédaction avancée de scripts Bash référencé par Jefromi, ces exemples montrent comment les pipes créent des sous-shell:

$ echo $$ $BASHPID | cat -
11656 31528
$ echo $$ $BASHPID
11656 11656
$ echo $$ | while read line; do echo $line $$ $BASHPID; done
11656 11656 31497
$ while read line; do echo $line $$ $BASHPID; done <<< $$
11656 11656 11656
32
Dennis Williamson

Le PID est stocké dans $$.

Exemple: kill -9 $$ va tuer l'instance Shell à partir de laquelle il a été appelé.

6
neo

Vous pouvez utiliser la variable $$.

2

Si le processus est un processus enfant et que $ BASHPID n'est pas défini, il est possible d'interroger le ppid d'un processus enfant créé du processus en cours d'exécution. C'est peut-être un peu moche, mais ça marche. Exemple:

sleep 1 &
mypid=$(ps -o ppid= -p "$!")
0
Joakim J. Rapp