小编典典

为什么 $$ 返回与父进程相同的 id?

all

我对 Bash 有疑问,我不知道为什么。
在 shell 下,我输入:

echo $$    ## print 2433
(echo $$)  ## also print 2433
(./getpid) ## print 2602

getpid获取当前 pid 的 C 程序在哪里,例如:

   int main() {
    printf("%d", (int)getpid());
    return 0;
   }

让我困惑的是:

  1. 我认为“(命令)”是一个子进程(对吗?),我认为它的 pid 应该与 其父 pid 不同,但它们是相同的,为什么......
  2. 当我使用我的程序在括号之间显示 pid时,它显示的 pid 是不同的,对吗?
  3. $$像宏吗?

你能帮助我吗?


阅读 184

收藏
2022-07-30

共1个答案

小编典典

$$定义为在子shell中返回父进程ID;从“特殊参数”下的手册页中:

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

bash4、可以通过 获取子进程ID BASHPID

~ $ echo $$
17601
~ $ ( echo $$; echo $BASHPID )
17601
17634
2022-07-30