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

问题描述 投票:152回答:6

我对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. '$$'是否类似于宏?

您能帮我吗?

linux bash shell pid
6个回答
214
投票

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


80
投票

您可以使用以下之一。


25
投票
  1. 括号调用subshell in Bash。由于它只是一个子shell,因此可能具有相同的PID-取决于实现。

4
投票

如果想让C程序打印shell的PID,请尝试$BASHPID。>>


2
投票

如果您询问如何获取已知命令的PID,它将类似于以下内容:


1
投票

这是获取正确pid的一种普遍方法

© www.soinside.com 2019 - 2024. All rights reserved.