Respostas:
A variável '$$' contém o PID.
use $BASHPID
ou$$
Consulte o manual para obter mais informações, incluindo diferenças entre os dois.
TL; DRTFM
$$
Expande para o ID do processo do shell.
()
subshell, ele se expande para o ID do processo do shell de chamada, não para o subshell.$BASHPID
Expande para o ID do processo Bash atual.
()
subshell, ele se expande para o ID do processo do subshell$BASHPID
é novo para bater 4. Se você estiver usando BASH 3.x, você tem que usar$$
Além do exemplo dado no Advanced Bash Scripting Guide referido pelo Jefromi , estes exemplos mostram como os pipes criam subshells:
$ 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
). A cadeia é referida como uma "cadeia aqui".
O PID é armazenado em $$
.
Exemplo: kill -9 $$
matará a instância do shell da qual é chamada.
kill -9
(com -9
bandeira) é considerado nocivo e só deve ser usado se for absolutamente necessário).
kill -9 $$
faz exatamente 1 coisa. Isso mata o processo atual do shell . Isso é útil se você tiver feito algo na sessão shell que não deseja que seja escrito .bash_history
como:docker run -e PASSWORD=hunter2 ircbot
Você pode usar a $$
variável
Se o processo for um processo filho e $ BASHPID não estiver definido, é possível consultar o ppid de um processo filho criado do processo em execução. Pode ser um pouco feio, mas funciona. Exemplo:
sleep 1 &
mypid=$(ps -o ppid= -p "$!")