Ответы:
Переменная $$ содержит PID.
использовать $BASHPIDили$$
См. Руководство для получения дополнительной информации, включая различия между ними.
TL; DRTFM
$$ Расширяется до идентификатора процесса оболочки.
()подоболочке он расширяется до идентификатора процесса вызывающей оболочки, а не подоболочки.$BASHPID Расширяется до идентификатора текущего процесса Bash.
()подоболочке он расширяется до идентификатора процесса подоболочки$BASHPIDэто новинка для BASH 4. Если вы используете BASH 3.x, вы должны использовать$$
В дополнение к примеру, приведенному в Advanced Bash Scripting Guide, на который ссылается Jefromi , эти примеры показывают, как каналы создают подоболочки:
$ 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). Строка называется «здесь строка».
PID хранится в $$.
Пример: kill -9 $$уничтожит экземпляр оболочки, из которой он вызван.
kill -9(с -9флагом) считается вредным и используется только в случае крайней необходимости).
kill -9 $$делает ровно 1 вещь. Это убивает текущий процесс оболочки . Это полезно, если вы сделали что-то в сеансе оболочки, которое вы не хотите записывать в .bash_historyLike:docker run -e PASSWORD=hunter2 ircbot
Вы можете использовать $$переменную.
Если процесс является дочерним процессом, а $ BASHPID не задан, можно запросить ppid созданного дочернего процесса запущенного процесса. Это может быть немного некрасиво, но это работает. Пример:
sleep 1 &
mypid=$(ps -o ppid= -p "$!")