当前位置: 技术问答>linux和unix
fork之后的输出
来源: 互联网 发布时间:2015-03-16
本文导语: 简单问题,运行时“Before fork!”总出现两次; 另外系统提示符[xx@localhost ..]还夹在程序输出的之间。 这么回事? 典型输出:Before fork! Before fork! #--this is subP.the ID is xxxxx [xx@localhost ..]@--parentP.after...
简单问题,运行时“Before fork!”总出现两次;
另外系统提示符[xx@localhost ..]还夹在程序输出的之间。
这么回事?
典型输出:Before fork!
Before fork!
#--this is subP.the ID is xxxxx
[xx@localhost ..]@--parentP.after fork.
#include "unistd.h"
#include "sys/types.h"
#include "stdio.h"
main()
{
pid_t pid;
printf("nBefore fork!");
if((pid=fork())>0)
{ printf("n#--this is subP.the ID is %d.",pid);
exit(0);
}
else{printf("n@--parentP.after fork.");
}
printf("n^^^^^^^^^^^^");
exit(0);
}
}
另外系统提示符[xx@localhost ..]还夹在程序输出的之间。
这么回事?
典型输出:Before fork!
Before fork!
#--this is subP.the ID is xxxxx
[xx@localhost ..]@--parentP.after fork.
#include "unistd.h"
#include "sys/types.h"
#include "stdio.h"
main()
{
pid_t pid;
printf("nBefore fork!");
if((pid=fork())>0)
{ printf("n#--this is subP.the ID is %d.",pid);
exit(0);
}
else{printf("n@--parentP.after fork.");
}
printf("n^^^^^^^^^^^^");
exit(0);
}
}
|
1."Before fork"被输出两次是因为它在fork之前被缓冲存起来没有实际输出到设备,如果紧跟printf("nBefore fork!");之后使用fflush(stdout)它将立即输出到设备将不会有两次输出。
2.父进程恰好先于子进程输出之前终止了,因此提示符出现于子进程的输出之前。
3.从字面上看,父子进程的理解反了。
2.父进程恰好先于子进程输出之前终止了,因此提示符出现于子进程的输出之前。
3.从字面上看,父子进程的理解反了。
|
fork复制了父京城的文件局并,包括为输出的数据
所以Before fork被父子进程都打印了
改称printf("nBefore fork!n");强制输出就没事了
所以Before fork被父子进程都打印了
改称printf("nBefore fork!n");强制输出就没事了
|
应该是父进程推出就会有提示符
|
这个问题相当经典!