Process fork()-你能解释一下这个输出吗

Process fork()-你能解释一下这个输出吗,process,fork,Process,Fork,我无法理解这个程序的输出 #include<stdio.h> #include<unistd.h> void fork1() { printf("\n %d L0", getpid()); fork(); printf("\n %d L1", getpid()); fork(); printf("\n %d Bye", getpid()); } int main() { fork1(); return 0; } #包括 #包括 void fork1()

我无法理解这个程序的输出

#include<stdio.h>
#include<unistd.h>
void fork1()
{
 printf("\n %d L0", getpid());
 fork();
 printf("\n %d L1", getpid());
 fork();
 printf("\n %d Bye", getpid());
}

int main()
{
fork1();
return 0;
}  
#包括
#包括
void fork1()
{
printf(“\n%d L0”,getpid());
fork();
printf(“\n%d L1”,getpid());
fork();
printf(“\n%d Bye”,getpid());
}
int main()
{
fork1();
返回0;
}  
输出

2625L0

2625L0

2625 L1

2625再见2626 L1

2626再见2625 L1

2627再见2626 L1


2628再见有三个要点:

  • fork()将复制父进程的缓冲区
  • printf正在处理缓冲区
  • printf会在带有“\n”、EOF等时刷新缓冲区
  • 因此,如果将printf更改为printf(“XXXX\n”),事情将变得正常

    有两个问题:1)“printf()”被缓冲。字符不会立即显示;它们仅在操作系统决定刷新时显示。2)此外,操作系统可以(也可能会)在I/O写入的中间之间来回切换。这两个问题应该可以解释您在输出中看到的“交错”。