Ответы:
Переменная $$ содержит 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_history
Like:docker run -e PASSWORD=hunter2 ircbot
Вы можете использовать $$
переменную.
Если процесс является дочерним процессом, а $ BASHPID не задан, можно запросить ppid созданного дочернего процесса запущенного процесса. Это может быть немного некрасиво, но это работает. Пример:
sleep 1 &
mypid=$(ps -o ppid= -p "$!")