分叉和 child/parent 个进程
Fork and child/parent processes
我正在为我的 OS class 准备期中考试,并且正在查看此代码示例。在我的系统上(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;
}
它将打印 ONE
,然后是:
对于 parent 进程:
TWO
FOUR
对于 child 过程:
TWO
THREE
这两个进程是不同的,它们之间没有同步。他们 运行 在他们自己的时间安排他们的适当时间。
也就是说,如果 parent 比 child 快,您可以得到 TWO
FOUR
,然后是 TWO
THREE
。如果 child 更快,您可以得到 TWO
THREE
,然后是 TWO
FOUR
。如果它们大致相同,您可能会得到它们的输出混合的结果,例如 TWO
TWO
FOUR
THREE
或其任意组合。
我正在为我的 OS class 准备期中考试,并且正在查看此代码示例。在我的系统上(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;
}
它将打印 ONE
,然后是:
对于 parent 进程:
TWO
FOUR
对于 child 过程:
TWO
THREE
这两个进程是不同的,它们之间没有同步。他们 运行 在他们自己的时间安排他们的适当时间。
也就是说,如果 parent 比 child 快,您可以得到 TWO
FOUR
,然后是 TWO
THREE
。如果 child 更快,您可以得到 TWO
THREE
,然后是 TWO
FOUR
。如果它们大致相同,您可能会得到它们的输出混合的结果,例如 TWO
TWO
FOUR
THREE
或其任意组合。