fork()从哪里开始

时间:2018-04-02 23:22:23

标签: c fork

据我所知,fork创建了一个重复的进程,但它也复制了它的程序计数器,所以它继续从它后面的行继续但是为什么这个代码在fork之前打印hello world两次

#include <stdio.h>
#include <sys/wait.h>
int main()
{
    printf("Hello World");

    fork();

    wait(NULL);
    return 0;
}

1 个答案:

答案 0 :(得分:3)

printf实际上并不打印 - 它实际上只是将数据放入缓冲区以便稍后打印。当缓冲区被刷新时,它实际上会被打印出来,这可能以各种方式发生。

在你的情况下,缓冲区刷新直到fork之后才会发生,所以父和子都有一个字符串的副本,当它们分叉时要在缓冲区中打印,并且最终都打印它。 / p>