Я - новичок при программировании оболочки удара. Можно ли сказать мне о символах '$$' в оболочке удара?
Если я пробую следующее
#> echo $$
это печатает
#>18756
Можно ли сказать мне, что этот символ используется для и когда?
Это идентификатор процесса самого бэш-процесса.
Вы можете использовать его для отслеживания вашего процесса в течение его жизни - используйте 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.
, если у вас есть 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.