首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于fork的有关问题

2012-02-28 
关于fork的问题intmain(){intifor(i0i3i++){if(fork()0)printf( child\n )elseprintf( parent\

关于fork的问题
int   main()
{
        int   i;
        for(i   =   0;   i   <   3;   i++)
        {
                if(fork()   ==   0)
                          printf( "child\n ");
                else
                          printf( "parent\n ");
        }
        return   0;
}
为什么这个程序总共打印出来了7个child字符串啊?


[解决办法]
因为每个child里面也要进行循环阿。
0 1 2

p0 parent parent parent
p001 child
p01 child parent
p011 child
p1 child parent parent
p101 child
p11 child parent
p111 child
[解决办法]
1、fork()的作用是生成一个子进程,该子进程拥有与父进程的相同的堆栈空间,你也可以理解为他们俩是双胞胎兄弟,从fork()开始就一模一样了,只是它们所在内存位置不同而已。
2、我在bsd上跑了,是7个child和7个parent。
其实分析同lynnboy(楠公小白(lynnboy)) ,在执行的过程中,子进程也在做循环的。
3、如果要得到结果是3个child和3个parent,可以在每次循环的时候结束子进程。代码如下:
int main()
{
int i;
for(i = 0; i < 3; i++)
{
if(fork() == 0)
{
printf( "child\n ");
return 0;
}
else
printf( "parent\n ");
}
return 0;
}

4、关于fork和exec,我做了一点的小结。“关于exec组函数的一些小结”地址是
http://topic.csdn.net/u/20070918/17/124aa470-51e6-42af-8525-d9f314055930.html
5、我刚刚毕业,刚刚接触unix编程,现在学习的是《unix环境高级编程》,如果有什么见解错误也请网友指出,我们共同进步。

热点排行