bash:child无法正确获取其PID

时间:2011-05-02 21:00:15

标签: 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: I am 26542
child: I am 26542

1 个答案:

答案 0 :(得分:4)

在Bash中,$$$BASHPID个变量有些令人困惑。 $$是脚本本身的进程ID。 $BASHPID是当前Bash实例的进程ID。这些东西不一样,但往往给出相同的结果。在您的情况下,您使用不正确。在函数$$中使用$BASHPID替换foo将解决问题。

有关详细信息,请参阅Internal VariablesBash Advanced Scripting Guide部分。