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?
La variable '$$' contient le PID.
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 .()
, 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 .()
, il se développe en ID de processus du sous-shell. 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
Le PID est stocké dans $$
.
Exemple: kill -9 $$
va tuer l'instance Shell à partir de laquelle il a été appelé.
Vous pouvez utiliser la variable $$
.
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 "$!")