2011-10-14 48 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