Unix Fork理解

时间:2011-10-14 14:54:21

标签: posix fork

我正在学习process forking,我正在尝试列出3的代码:

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

然后示例页面首先显示child的输出,然后显示parent的输出?我不明白这一点。

另外,当我在大学实验室中运行代码时,我会得到如页面所示的输出。非常感谢提前回答这个天真的问题。

如果重要,我正在运行Ubuntu 11.04。

1 个答案:

答案 0 :(得分:6)

fork()系统调用之后,由OS调度程序决定哪个进程首先继续。重复运行同一程序可能会导致不同的订单。

这称为non-determinism