Risposte:
La variabile '$$' contiene il PID.
uso $BASHPID
o$$
Vedere il manuale per ulteriori informazioni, comprese le differenze tra i due.
TL; DRTFM
$$
Si espande nell'ID processo della shell.
()
subshell, si espande nell'ID del processo della shell che invoca, non nella subshell.$BASHPID
Si espande nell'ID processo del processo Bash corrente.
()
subshell, si espande nell'ID processo della subshell$BASHPID
è una novità di BASH 4. Se si utilizza BASH 3.x, è necessario utilizzare$$
Oltre all'esempio fornito nella Guida avanzata agli script di Bash a cui fa riferimento Jefromi , questi esempi mostrano come le pipe creano sottostrutture:
$ 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 stringa viene definita "qui stringa".
Il PID è memorizzato in $$
.
Esempio: kill -9 $$
ucciderà l'istanza della shell da cui viene chiamata.
kill -9
(con -9
bandiera) è considerato dannoso e può essere utilizzato solo se è assolutamente necessario).
kill -9 $$
fa esattamente 1 cosa. Uccide l' attuale processo di shell . Questo è utile se nella sessione di shell hai fatto qualcosa che non vuoi scrivere a .bash_history
Mi piace:docker run -e PASSWORD=hunter2 ircbot
Puoi usare la $$
variabile
Se il processo è un processo figlio e $ BASHPID non è impostato, è possibile eseguire una query sul ppid di un processo figlio creato del processo in esecuzione. Potrebbe essere un po 'brutto, ma funziona. Esempio:
sleep 1 &
mypid=$(ps -o ppid= -p "$!")