用C分叉一个进程

Era*_*ray 5 c fork

我正在遵循这个指南,fork()但对我来说并不清楚.

两个进程将在fork()调用之后的下一个语句处开始执行.在这种情况下,两个进程将在赋值语句中开始执行,如下所示: 在此输入图像描述

根据这句话,这个脚本

printf("before ");
fork();
printf("after ");
Run Code Online (Sandbox Code Playgroud)

应该打印这个:(因为子进程将从中开始printf("after"))

before after after
Run Code Online (Sandbox Code Playgroud)

但它正在打印这个:

before after before after
Run Code Online (Sandbox Code Playgroud)

那么子进程是从文件的第一行开始的吗?你能告诉我我的代码有什么问题吗?我误解了那句话吗?

编辑

脚本在OS X上编译和执行

Phi*_*rry 7

当您创建一个新进程时,它'继承'原始进程的所有变量 - 因此也是所有缓冲区.由于"之前"尚未刷新并仍在缓冲区中,子进程也将在缓冲区中包含此字符串并打印它.因此,您必须fflush(stdout);在分叉过程之前调用.