2010-01-08 103 views
9

我是bash shell編程的初學者。你能告訴我關於bash shell中的'$$'符號嗎?

如果我嘗試以下

#> echo $$ 

它打印

#>18756 

你能告訴我這是什麼符號是用於什麼時候?

+0

什麼已經成爲你的shell閱讀精美手冊的良好傳統? – Jens 2012-05-12 17:02:57

回答

16

這是bash進程本身的進程ID。

您可以使用它在它的生命來跟蹤你的進程 - 使用ps -p,看它是否仍在運行,發送使用kill(暫停。例如,進程)的信號,與renice改變它的優先級,依此類推。

進程標識通常寫入日誌文件,特別是一次運行多個腳本實例時,以幫助跟蹤性能或診斷問題。

這裏的the bash documentation概述了特殊參數。

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. 
+0

或者您可以直接鏈接到官方Bash文檔:http://www.gnu.org/software/bash/manual/bashref.html#Special-Parameters http://www.gnu.org/software/bash/manual /bashref.html#Shell-Variables – ephemient 2010-01-10 22:16:09

+1

好主意 - 完成,謝謝。 – 2010-01-10 23:08:43

1

如果你有bash中,一個比較接近相當於是BASHPID變量。看到男人猛擊

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.