fork()用法没有得到正确的输出

时间:2011-05-11 05:34:02

标签: c fork

我使用以下代码进行fork执行

#include <stdio.h>
#include <sys/types.h>

int main()
{
    int pid;
    pid=fork();
    if(pid==0)
    {
        printf("\n child 1");
        pid=fork();
        if (pid==0)
           printf("\n child 2");
    }
    return 0;
}

我假设的输出应该是 child1 的child2

相反,我正在

child1 child2 child1

无法理解fork行为

2 个答案:

答案 0 :(得分:3)

如果您在致电FILE之前已将数据写入任何stdio fork并打算在FILE之后使用相同的fork,则必须在致电fflush之前,在FILE上致电fork。如果不这样做会导致未定义的行为

请参阅此处了解正式要求:

http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_05_01

具体地,

  

请注意,在fork()之后,存在两个句柄,其中之前存在一个句柄。应用程序应确保,如果可以访问这两个句柄,它们都处于另一个可以成为活动句柄的状态。应用程序应准备fork(),就像它是活动句柄的更改一样。 (如果其中一个进程执行的唯一操作是exec函数之一或_exit()(而不是exit()),则永远不会在该进程中访问句柄。)

答案 1 :(得分:0)

你需要刷新标准输出:

printf( "\n child 1" )
fflush( stdout );
相关问题