Subshel​​l没有新的进程ID?

时间:2015-03-16 02:48:13

标签: bash

在我的shell脚本中,我写了:

#! /bin/bash
(ls;echo$$)
echo$$

然后我运行shell,两个输出是相同的

2592
2592

为什么subshel​​l没有新的进程ID?

1 个答案:

答案 0 :(得分:2)

$$是主shell的进程ID。要获取子shell的进程ID,请使用BASHPID:

$ echo $$ $BASHPID; ( echo $$ $BASHPID; )
19610 19610
19610 21937

子shell有PID 21937。

文档

来自man bash

  

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

相比之下,$$记录如下:

  

$$
  扩展到shell的进程ID。在()子shell中,它会扩展   到当前shell的进程ID,而不是子shell。