Unix Fork理解

del*_* me 2 posix fork

我正在学习流程分叉,我正在尝试列出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
Run Code Online (Sandbox Code Playgroud)

我得到的输出:

Original program, pid=2728 
In parent, pid=2728, fork returned=2731
In child process, pid=2731, ppid=2728
Run Code Online (Sandbox Code Playgroud)

样本页面首先显示孩子的输出,然后显示父母的输出?我不明白这一点.

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

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

Kur*_*man 6

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

这称为非决定论.