2011-10-14 49 views
2

我學習process forking我試圖清單3的代碼:的Unix叉瞭解

sunbox$ cat fork2.c 
#include <unistd.h> 
#include <stdio.h> 

int main (void) { 

     pid_t p; 

     printf("Original program, pid=%d\n", getpid()); 
     p = fork(); 
     if (p == 0) { 
       printf("In child process, pid=%d, ppid=%d\n", 
         getpid(), getppid()); 
     } else { 
       printf("In parent, pid=%d, fork returned=%d\n", 
         getpid(), p); 
     } 
} 

sunbox$ gcc fork2.c -o fork2 
sunbox$ ./fork2 
Original program, pid=767 
In child process, pid=768, ppid=767 
In parent, pid=767, fork returned=768 

輸出我得到:

Original program, pid=2728 
In parent, pid=2728, fork returned=2731 
In child process, pid=2731, ppid=2728 

儘管樣本頁面顯示了孩子先輸出,然後是父母?我不明白這一點。

另外,當我在大學實驗室運行代碼時,我得到的輸出如頁面所示。爲了回答這個天真的問題,非常感謝麻煩。

如果有問題,我正在運行Ubuntu 11.04。

+0

更好的地方問POSIX相關的問題是[unix.se](http://unix.stackexchange.com/) – ierax

+0

我已經把你正在討論的代碼在你的問題。 – JeremyP

+0

@faif:由於它與POSIX軟件開發有關,我認爲它屬於SO。 – Rob

回答

6

系統調用fork()之後,由OS調度程序決定哪個進程首先繼續。重複運行同一個程序可能會導致不同的命令。

這叫做non-determinism