为什么这样当我运行下面的脚本时,父母和孩子都认为他们有相同的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
答案 0 :(得分:4)
在Bash中,$$
和$BASHPID
个变量有些令人困惑。 $$
是脚本本身的进程ID。 $BASHPID
是当前Bash实例的进程ID。这些东西不一样,但往往给出相同的结果。在您的情况下,您使用不正确。在函数$$
中使用$BASHPID
替换foo
将解决问题。
有关详细信息,请参阅Internal Variables的Bash Advanced Scripting Guide部分。