用fork()

时间:2016-10-12 00:02:27

标签: c fork systems-programming

我试图理解为什么这个程序的输出始终以012xxxxxxx开头。这是代码:

int main() {

int i;
for (i=0; i<2; i++) {
    fork();
    printf("%d", i);
}
printf("2");

}

我勾画了流程图:

enter image description here

但我不明白这个输出是如何可能的。 有人可以帮我看看为什么总是如此。

1 个答案:

答案 0 :(得分:0)

一个简单的解释是,原始进程比分叉进程更快准备好继续。

因此原始进程触发OS中的分叉,然后继续,生成0,1,2,并完成。然后分叉的进程开始并进行打印。

请注意fork()不保证执行两个进程的顺序;它们只是操作系统中的两个独立进程。操作系统很可能让第一个在切换之前运行另外100个CPU周期(然后它已经完成) 在另一个操作系统上,它可能只是反过来......