child 进程从创建时的第一行开始(使用fork)

child process starts from the first line when created (with fork)

为什么我的child进程从main的第一行开始?当我运行我的程序时,"Hello There"会被打印两次。 Child process 应该在 fork 后开始上线,我说的对吗?

int main(){
       printf("Hello There!");
       pid_t PID;
       PID = fork();

       if(PID == 0){
          //Child
       }
       else{
          //parent
       }
}

这对我来说是个大问题,因为在我的真实程序中,我在 fork 之前用 mmap 制作私有文件。因为这件事发生在我身上,parent 和 child 有不同的私人文件..

不是被调用了两次...这是一种视错觉! :)

但是......你的 STDOUT 没有被刷新,因为没有 \n,你的 fork 然后复制你的整个状态,两个进程都在进行,最终他们刷新,都刷新他们的输出缓冲区(在期间复制fork()), 并导致输出出现两次。

如果你添加一个\n,那么改变你的printf行如下:

printf("Hello There!\n");

您现在将获得预期的结果。

或者显式刷新输出:

printf("Hello There!");
fflush(stdout);