$$
是否有关于bash 后台进程中的值的文档?
man
声称$$
在子shell中是主进程的PID。
根据以下文档,子shell是通过大括号创建的(...)
,但是,它似乎cmd &
不是正式的子shell。
https://tldp.org/LDP/abs/html/subshells.html
https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap03.html
答案1
答案2
$$
文档中有一些参考man bash
:
特殊参数
$
扩展为 shell 的进程 ID。在()
子 shell 中,它扩展为当前 shell 的进程 ID,而不是子 shell。
外壳变量
BASHPID
扩展为当前 bash 进程的进程 ID。这与$$
某些情况下不同,例如不需要重新初始化 bash 的子 shell。
命令执行环境
shell有一个执行环境,它由以下部分组成:
- [...]
- 各种进程 ID,包括后台作业的进程 ID、 的值
$$
和 的值PPID
根据经验,您可以看到$$
在语法子 shell 中保持不变,但$BASHPID
发生了变化:
echo "$BASHPID - $$" # 23671 - 23671
( echo "$BASHPID - $$" ) # 41199 - 23671
true | ( echo "$BASHPID - $$" ) | cat # 41258 - 23671