Как скрипт Linux / Unix Bash узнает свой собственный PID?
Вопрос
У меня есть скрипт в Bash под названием Script.sh
, и ему нужно знать свой собственный PID (т.е.Мне нужно получить PID внутри Script.sh )
Есть какие - нибудь идеи , как это сделать ?
Решение
Переменная '$$' содержит PID.
Другие советы
использование $BASHPID
или $$
Смотрите на руководство пользователя для получения дополнительной информации, включая различия между ними.
TL;DRTFM
$$
Расширяется до идентификатора процесса командной строки.- В
()
подоболочка, она расширяется до идентификатора процесса вызывающей оболочки, а не подоболочки.
- В
$BASHPID
Расширяется до идентификатора процесса текущего процесса Bash.- В
()
подоболочка, она расширяется до идентификатора процесса подоболочки
- В
В дополнение к примеру, приведенному в Расширенное Руководство по написанию сценариев Bash на который ссылается Джефроми, эти примеры показывают , как каналы создают подоболочки:
$ 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
PID хранится в $$
.
Пример: kill -9 $$
уничтожит экземпляр оболочки, из которого он вызывается.
Вы можете использовать $$
переменная.
Если процесс является дочерним процессом и $BASHPID не задан, можно запросить ppid созданного дочернего процесса запущенного процесса.Это может быть немного некрасиво, но это работает.Пример:
sleep 1 &
mypid=$(ps -o ppid= -p "$!")