Linux bash:child无法正确获取其PID

Linux bash:child无法正确获取其PID,linux,bash,Linux,Bash,为什么当我运行下面的脚本时,父级和子级都认为它们具有相同的pid #!/bin/bash foo () { while true do sleep 5 echo child: I am $$ done } ( foo ) & echo parent: I am $$ and child is $! >./test.sh parent: I am 26542 and child is 26543 >child:

为什么当我运行下面的脚本时,父级和子级都认为它们具有相同的pid

#!/bin/bash

foo ()
{
    while true
    do
        sleep 5
        echo child: I am $$
    done
}


( foo ) &

echo parent: I am $$ and child is $!

>./test.sh
parent: I am 26542 and child is 26543
>child: I am 26542
child: I am 26542

在Bash中,有
$$
$BASHPID
变量有些混乱<代码>$$是脚本本身的进程ID
$BASHPID
是当前Bash实例的进程ID。这些事情是不一样的,但往往会产生相同的结果。在你的情况下,你用错了。将函数
foo
中的
$$
替换为
$BASHPID
,将解决此问题


有关详细信息,请参阅的部分。

谢谢。有趣的是,当父母离开时,孩子给了26542,而在ps中,这个pid没有人。我想知道这是什么意思?