3

我正在通过Advanced Bash-Scripting Guide学习 bash-shell 。这本书说

括号内的命令列表开始一个子shell。

所以,我尝试了这段代码:

echo "in parentshell \$\$=$$"
( echo "in subshell \$\$=$$" )

后者应该打印子进程的pid 我认为,但实际上结果与父shell 的pid 是一样的。谁能告诉我为什么?

4

1 回答 1

3

根据参考手册的特殊参数部分

$$扩展为 shell 的进程 ID。在()子shell 中,它扩展为调用shell 的进程ID,而不是子shell。

所以你观察到的行为没有什么奇怪的,它有完整的记录。

正如 Ansgar Wiechers 在评论中正确指出的那样,

子shell的PID可以用变量来确定$BASHPID

这方面的文档可以在参考手册的Bash 变量部分找到。在那里你会读到:

BASHPID展开为当前 Bash 进程的进程 ID。这与$$某些情况下不同,例如不需要重新初始化 Bash 的子 shell。

谢谢安斯加尔!

笔记。我真的不喜欢你正在阅读的参考资料。

于 2013-06-30T12:37:35.300 回答