Réponses:
La variable '$$' contient le PID.
utiliser $BASHPID
ou$$
Consultez le manuel pour plus d'informations, y compris les différences entre les deux.
TL; DRTFM
$$
S'étend à l'ID de processus du shell.
()
sous - shell, il s'étend à l'ID de processus du shell appelant, et non au sous-shell.$BASHPID
S'étend à l'ID de processus du processus Bash actuel.
()
sous - shell, il se développe en l'ID de processus du sous-shell$BASHPID
c'est nouveau dans BASH 4. Si vous utilisez BASH 3.x, vous devez utiliser$$
En plus de l'exemple donné dans le Advanced Bash Scripting Guide référencé par Jefromi , ces exemples montrent comment les tubes 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
stdin
). La chaîne est appelée "chaîne ici".
Le PID est stocké dans $$
.
Exemple: kill -9 $$
tuera l'instance du shell à partir de laquelle elle est appelée.
kill -9
(avec -9
indicateur) est considéré comme nocif et ne doit être utilisé que si cela est absolument nécessaire).
kill -9 $$
exactement 1 chose. Il tue le processus shell actuel . Ceci est utile si vous avez fait quelque chose dans la session shell que vous ne voulez pas écrire .bash_history
comme:docker run -e PASSWORD=hunter2 ircbot
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 "$!")