2017-05-08 11 views
0

私はハロー世界のコードのこの部分を実行しようとしていますが返されます。GETPID()は、予期しない値

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <sys/types.h> 

char string1[] = "\n Hello"; 
char string2[] = " World.\n"; 

int main(void) 
{ 

int childpid; 

if((childpid = fork()) == -1){ 
    printf("\n Can't fork.\n"); 
    exit(0); 
} 

else if(childpid == 0){ /* Child process */ 
    printf("\n Child: My pid = %d, Parent pid = %d \n", getpid(), getppid()); 
    exit(0);  
} 

else{ /* Parent Process */ 
    printf("\n Parent: Child pid = %d, My pid = %d, Parent pid = %d \n", childpid, getpid(),getppid()); 
    exit(0); 
} 

} 

私は取得しています出力は、子供の親PIDに関しては毎回異なります。

~$ ./f 

Parent: Child pid = 6394, My pid = 6393, Parent pid = 27383 

Child: My pid = 6394, Parent pid = 1842 

~$ ./f 

Parent: Child pid = 6398, My pid = 6397, Parent pid = 27383 

Child: My pid = 6398, Parent pid = 6397 

pid = 1842がどのプロセスに属しているかを調べたところ、/sbin/upstart --userのPIDであることがわかりました。誰でもこれらの結果を解釈してください。

+0

waitpidの。あなたが貼り付けたコードは私のマシンで予想される動作を示しています –

答えて

4

競合状態です。時々、あなたの親は少し速く完了します、これらはあなたがこの奇妙な結果(異なった親のID)を見る場合です。

親の中でしばらく眠り、何が起こるかを見てください。

実際には、あなたはあなたの子供のために待つことができます:私はあなたの問題を再現することができません

... 
int status; 
waitpid(childpid, &status, 0); 
printf("\n Parent: Child pid = %d, My pid = %d, Parent pid = %d \n", childpid, getpid(),getppid()); 
exit(0); 
... 
関連する問題