fork和子/父进程

Rya*_*yan 0 c fork

我正在为我的OS课程学习期中考试,并且正在研究这个代码示例.在我的系统(OS X Yosemite)上,我得到两个两个三,所以看起来子进程在父进程之前运行并输出,尽管缺少wait()函数.这是所有系统上的预期行为,还是可能是两个三倍,甚至是不同的东西?

#include <stdio.h>
#include <unistd.h>

int main()
{
  int rc;
  printf( "ONE\n" );
  rc = fork();
  printf( "TWO\n" );
  if ( rc == 0 ) { printf( "THREE\n" ); }
  if ( rc > 0 ) { printf( "FOUR\n" ); }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

ant*_*tak 5

它会打印ONE,然后是:

对于父进程:

TWO
FOUR
Run Code Online (Sandbox Code Playgroud)

对于子进程:

TWO
THREE
Run Code Online (Sandbox Code Playgroud)

这两个过程是截然不同的,它们之间没有同步.他们按照自己的时间进行适当的训练.

所以说如果父母比孩子快,你可以TWO FOUR跟着TWO THREE.如果孩子更快,你可以TWO THREE跟着TWO FOUR.如果它们大致相同,则可以得到其输出混合的结果,例如TWO TWO FOUR THREE,或其任何组合.