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

时间:2015-10-24 19:03:52

标签: c linux fork child-process

为什么我的子进程从main的第一行开始?当我运行我的程序时,“Hello There”将被打印两次。子进程应该在fork之后开始,我是对的吗?

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

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

这对我来说是个大问题,因为在我的真实程序中,我在fork之前使用mmap制作私有文件。由于这一点,我发生了什么,父母和孩子有不同的私人档案..

1 个答案:

答案 0 :(得分:6)

NOT 被叫两次......这是一种视错觉! :)

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

如果添加\ n,请更改printf行,如下所示:

printf("Hello There!\n");

您现在可以获得预期的结果。

或明确刷新输出:

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