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

我在使用 Bash 时遇到问题,我不知道为什么。
在shell下,我输入:

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

其中getpid是一个获取当前pid的C程序,如:

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

让我困惑的是:

  1. 我认为“(command)”是一个子进程(对吗?),我认为它的 pid 应该与它的 parent pid 不同,但是它们是一样的,为什么...
  2. 当我使用我的程序在括号之间显示pid时,它显示的pid是不同的,对吗?
  3. $$ 是不是类似于宏?

你能帮帮我吗?

最佳答案

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

$ Expands to the process ID of the shell. In a () subshell, it expands to the process ID of the current shell, not the subshell.

bash 4中,可以通过BASHPID获取子进程ID。

~ $ echo $$
17601
~ $ ( echo $$; echo $BASHPID )
17601
17634

https://stackoverflow.com/questions/21063765/

相关文章:

python - 使用 groupby 获取组中具有最大值的行

python - 在列表中查找属性等于某个值的对象(满足任何条件)

linux - 在管道 grep 到 grep 后保留颜色

python - 在多个上下文管理器上创建一个 "with" block ?

windows - 互斥锁和临界区有什么区别?

linux - 使用 Unix 排序对多个键进行排序

linux - 如何更改 bash 历史完成以完成已经上线的内容?

linux - 否定 bash 脚本中的 if 条件

python - sum() 之类的函数是什么,但用于乘法?产品()?

python - 为什么提早返回比其他方法慢?