Что такое '$$' в оболочке удара?

Я - новичок при программировании оболочки удара. Можно ли сказать мне о символах '$$' в оболочке удара?

Если я пробую следующее

#> echo $$

это печатает

#>18756

Можно ли сказать мне, что этот символ используется для и когда?

9
задан martin clayton 3 September 2010 в 00:39
поделиться

2 ответа

Это идентификатор процесса самого бэш-процесса.

Вы можете использовать его для отслеживания вашего процесса в течение его жизни - используйте ps -p чтобы посмотреть, работает ли он еще, отправьте ему сигнал, используя kill (например, для приостановки процесса), измените его приоритет с renice, и так далее.

Идентификаторы процессов часто записываются в лог-файлы, особенно когда одновременно выполняется несколько экземпляров скрипта, чтобы помочь отследить производительность или диагностировать проблемы.

Вот бэш-документация , описывающая специальные параметры.

BASHPID, упомянутый ghostdog74, был добавлен в версию 4.0. Вот пример из Advanced Bash-Scripting Guide Менделя Купера , который показывает разницу между $$ и $BASHPID:

#!/bin/bash4

echo "\$\$ outside of subshell = $$" # 9602
echo "\$BASH_SUBSHELL outside of subshell = $BASH_SUBSHELL" # 0
echo "\$BASHPID outside of subshell = $BASHPID" # 9602
echo

( echo "\$\$ inside of subshell = $$" # 9602
echo "\$BASH_SUBSHELL inside of subshell = $BASH_SUBSHELL" # 1
echo "\$BASHPID inside of subshell = $BASHPID" ) # 9603
# Note that $$ returns PID of parent process.
16
ответ дан 4 December 2019 в 12:18
поделиться

, если у вас есть bash, относительно близкий эквивалент - переменная BASHPID. Смотрите man bash

  BASHPID
      Expands  to  the  process  id of the current bash process.  This differs from $$ under certain circumstances, such as subshells
      that do not require bash to be re-initialized.
1
ответ дан 4 December 2019 в 12:18
поделиться