c - 使用 fork() 的程序输出

标签 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

但我不明白这种输出是如何可能的。 谁能帮我看看为什么总是这样。

最佳答案

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

所以原始进程触发了操作系统中的 fork ,然后继续,产生 0、1、2,然后完成。然后 fork 进程开始并进行打印。

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

关于c - 使用 fork() 的程序输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39988567/

相关文章:

c - mkdir 函数在 C 中不起作用

c - 将值从子进程传递到父进程

debugging - Windows、Linux、OSX 上调试器的低级详细信息

计算在 for 循环中使用 fork 创建的进程数

c++ - 如何从 C++ 程序修改键盘中断(在 Windows XP 下)?

c - 我想获取宿主语言文件的时间(ctime(..)?)

c++ - 为什么 %p 不显示指针的全宽?

c - 在 C 中对二进制文件中的记录进行排序

c - C语言中的短路评估是什么?

c - parent 去世后,不会将标准输入控制权交给 child