2010-01-08 101 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.