我正在为我的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;
}
答案 0 :(得分:5)
它会打印ONE
,然后是:
对于父流程:
TWO
FOUR
对于子进程:
TWO
THREE
这两个过程是截然不同的,它们之间没有同步。他们按照自己的时间运行适当的时间。
所以说如果父母比孩子快,你可以得到TWO
FOUR
,然后是TWO
THREE
。如果孩子速度更快,您可以TWO
THREE
后跟TWO
FOUR
。如果它们大致相同,您可以得到其输出混合的结果,例如TWO
TWO
FOUR
THREE
或其任意组合。