叉子让我很困惑

gui*_*eek 8 c fork

任何人都可以解释一下这段代码是如何工作的?

int main()
{
  printf("Hello");
  fork();
  printf("World");
}
Run Code Online (Sandbox Code Playgroud)

打印:

HelloWorldHelloWorld
Run Code Online (Sandbox Code Playgroud)

我的确切问题是,为什么hello打印两次.是不是hello先打印,然后fork()执行?

此外,有时它打印:

 HelloWorld 
// then the reports....process exited with return value 0..etc etc.. then...//
HelloWorld
Run Code Online (Sandbox Code Playgroud)

为何输​​出?

Eri*_*ler 18

原因是:缓冲输出."Hello"在缓冲区中但在执行fork时尚未输出,因此forked进程以相同的缓冲区开头,包括相同的单词"Hello".然后,父和子输出"World",因此两者的总输出为"HelloWorld".

  • ...解决方案是在`fork`之前``fflush`. (4认同)