!!(100分请教)这是输出转向的BUG吗?
我可能说得比较罗嗦 耐心点看看吧
那天操作系统老师给我们一段代码 要我们画出进程树
代码如下
void Main()
{
int i;
printf("%5d%5d%5d",getpid(),getppid(),getPgid(0));
for(i=0;i<3;i++)
{
if(fork()==0)
{
printf("%5d%5d%5d",getpid(),getppid(),getpgid(0));
}
}
}
作业我是完成了 也了解了老师的意图 可是在做的过程中我发现一个问题,听我细细道来:
为了得到输出结果 我一开始用了">" 输出转向到一个文件 然后去看那个文件
发现子进程每次执行都会把父亲(或者爷爷)进程的相关id都printf一遍 再printf自己 最后结果比预计多出好几行 我也因此被搞得一头雾水 因为子进程不是不会去做fork前面的事吗?
等我直接在shell提示符下运行编译后的文件 看到的结果是理想中的也是理论中的
所以我就觉得用">"来输出转向是不是存在某种问题阿?
我想查帮助 可是man后面不知道打什么 :(
我用的是red hat 7.3 而且已经证实这个问题和shell无关(我在csh下也是如此)
请知道内情的高手点拨一下吧