在系统调用(执行点)之前分叉流程执行

时间:2014-11-20 10:31:22

标签: c fork

"当我们在进程上调用fork()并创建其子进程时,可以说执行点从两个进程中fork()调用旁边的点开始。但是当我检查时,

main() {
    printf("hello");
    val =fork();
    if(val==0){
        printf("child");
    }
    if(val>0){
        printf("parent");
    }
}

这个节目打印了你好两次。我有点困惑。请帮帮我。

1 个答案:

答案 0 :(得分:2)

执行printf("hello");时,输出为STDOUT的行缓冲,但不会刷新。现在当缓冲区仍然包含数据时,fork()调用使父进程和子进程都继承缓冲区中存在的数据,使其打印两次。

理想情况下,您应该按以下方式刷新标准输出:

printf("hello");
fflush(stdout);
fork();