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;
}
我假设的输出应该是 孩子1 child2
相反,我得到了
child1 child2 child1
无法理解分叉行为
I am using the following code for a fork execution
#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;
}
The output I assume should be
child1
child2
Instead I am getting
child1
child2 child1
Cannot understand the fork behaviour
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您在调用
fork
之前已将数据写入任何 stdioFILE
,并且打算在fork
之后使用相同的FILE
,在调用fork
之前,您必须对该FILE
调用fflush
。如果不这样做,就会导致未定义的行为。请参阅此处了解正式要求:
http://pubs.opengroup.org/ onlinepubs/9699919799/functions/V2_chap02.html#tag_15_05_01
具体来说,
If you have written data to any stdio
FILE
before callingfork
and intend to use the sameFILE
afterfork
, you must callfflush
on thatFILE
before callingfork
. Failure to do so results in undefined behavior.See here for the formal requirements:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_05_01
Specifically,
您需要刷新标准输出:
You need to flush stdout: