"当我们在进程上调用fork()并创建其子进程时,可以说执行点从两个进程中fork()调用旁边的点开始。但是当我检查时,
main() {
printf("hello");
val =fork();
if(val==0){
printf("child");
}
if(val>0){
printf("parent");
}
}
这个节目打印了你好两次。我有点困惑。请帮帮我。
答案 0 :(得分:2)
执行printf("hello");
时,输出为STDOUT
的行缓冲,但不会刷新。现在当缓冲区仍然包含数据时,fork()
调用使父进程和子进程都继承缓冲区中存在的数据,使其打印两次。
理想情况下,您应该按以下方式刷新标准输出:
printf("hello");
fflush(stdout);
fork();