我使用以下代码进行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行为
答案 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 );