2011-05-02 51 views
3

爲什麼當我運行下面的腳本時,父母和孩子都認爲他們具有相同的PID?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 

回答

4

在bash,有$$$BASHPID變量是有些混亂。 $$是腳本本身的進程ID。 $BASHPID是Bash當前實例的進程ID。這些事情是不一樣的,但往往會給出相同的結果。在你的情況下,你用錯了。替換$$$BASHPID功能foo將解決問題。

請參閱Internal Variables部分Bash Advanced Scripting Guide瞭解更多詳情。

+0

'---> spot on <----' – sehe 2011-05-02 21:09:06

+0

謝謝。有趣的是,當父母退出時,孩子給出了26542,並且ps中沒有人使用該pid。我不知道那是什麼語義? – 2011-05-02 21:20:11

+0

...如果我在$子$ BASHPID更改$它獲得一個空字符串.. – 2011-05-02 21:22:52