我正在遵循这个指南,fork()但对我来说并不清楚.
两个进程将在fork()调用之后的下一个语句处开始执行.在这种情况下,两个进程将在赋值语句中开始执行,如下所示:
根据这句话,这个脚本
printf("before ");
fork();
printf("after ");
Run Code Online (Sandbox Code Playgroud)
应该打印这个:(因为子进程将从中开始printf("after"))
before after after
Run Code Online (Sandbox Code Playgroud)
但它正在打印这个:
before after before after
Run Code Online (Sandbox Code Playgroud)
那么子进程是从文件的第一行开始的吗?你能告诉我我的代码有什么问题吗?我误解了那句话吗?
编辑
脚本在OS X上编译和执行
当您创建一个新进程时,它'继承'原始进程的所有变量 - 因此也是所有缓冲区.由于"之前"尚未刷新并仍在缓冲区中,子进程也将在缓冲区中包含此字符串并打印它.因此,您必须fflush(stdout);在分叉过程之前调用.