【发布时间】:2011-04-11 00:00:12
【问题描述】:
$$ 在脚本中使用时给出脚本进程的进程 ID,如下所示:
示例 1
#!/bin/bash
# processid.sh
# print process ids
ps -o cmd,pid,ppid
echo "The value of \$\$ is $$"
$ ./processid.sh
CMD PID PPID
bash 15073 4657
/bin/bash ./processid.sh 15326 15073
ps -o cmd,pid,ppid 15327 15326
The value of $$ is 15326
观察$$和ps给出的pid是15326
我的 shell 提示符是 pid 15073
但在子 shell 中,$$ 给出了父 shell 的 pid(即 15073)
示例 2
$ ( ps -o cmd,pid,ppid ; echo $$ )
CMD PID PPID
bash 15073 4657
bash 15340 15073
ps -o cmd,pid,ppid 15341 15340
15073
这里的子shell是pid 15340
问题:为什么会这样?脚本不是也在子shell中运行吗?示例 2 中的子 shell 与示例 1 中运行脚本的 shell 有什么区别?
【问题讨论】: