Как скрипт Linux / Unix Bash знает свой собственный PID? - PullRequest
124 голосов
/ 22 марта 2010

У меня есть скрипт на Bash с именем Script.sh, и он должен знать свой собственный PID (т.е. мне нужно получить PID внутри Script.sh)

Есть идеи, как это сделать?

Ответы [ 6 ]

203 голосов
/ 22 марта 2010

Переменная $$ содержит PID.

47 голосов
/ 22 марта 2010

использовать $BASHPID или $$

См. Руководство для получения дополнительной информации, включая различия между ними.

TL; DRTFM

  • $$ Расширяется до идентификатора процесса оболочки.
    • В подоболочке () он расширяется до идентификатора процесса вызывающей оболочки, а не подоболочки.
  • $BASHPID Расширяется до идентификатора текущего процесса Bash.
    • В подоболочке () она расширяется до идентификатора процесса подоболочки
32 голосов
/ 22 марта 2010

В дополнение к примеру, приведенному в 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
6 голосов
/ 22 марта 2010

PID хранится в $$.

Пример: kill -9 $$ уничтожит экземпляр оболочки, из которого вызывается.

2 голосов
/ 22 марта 2010

Вы можете использовать переменную $$.

0 голосов
/ 25 января 2019

Если процесс является дочерним процессом, а $ BASHPID не задан, можно запросить ppid созданного дочернего процесса запущенного процесса. Это может быть немного некрасиво, но это работает. Пример:

sleep 1 &
mypid=$(ps -o ppid= -p "$!")
...