| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 742 人关注过本帖
标题:vfork的使用
只看楼主 加入收藏
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
结帖率:88.89%
收藏
已结贴  问题点数:30 回复次数:3 
vfork的使用
关于vfork,如果我在子进程里面不调用exit(),那么就会不断的创建进程,直到到达进程最大限制后报错;而fork没有这个问题,不知道是什么原因,请大家指点。代码贴上
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main (void)
{
   int count = 1;
   int child;
   printf("Before create son, the father's count is:%d\n", count);
   child = vfork();
   if(child < 0)
     {
        printf("error in vfork!");
        exit(1);
      }
   if(child==0)
     {
        printf("This is son\n");
        //exit(1);
     }
   else
     {
        printf("After son, This is father\n");

     }
   return 0;
}

[ 本帖最后由 pauljames 于 2012-8-18 20:50 编辑 ]
搜索更多相关主题的帖子: create father include 
2012-08-18 20:48
justNPC
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:311
注 册:2012-8-11
收藏
得分:10 
1. fork():子进程拷贝父进程的数据段,代码段. vfork():子进程与父进程共享数据段.
  2. fork():父子进程的执行次序不确定.
  vfork():保证子进程先运行,在调用exec或exit之前与父进程数据是共享的,在它调用exec
  或exit之后父进程才可能被调度运行。
  3. vfork()保证子进程先运行,在她调用exec或exit之后父进程才可能被调度运行。如果在
  调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。

                                                          ----------摘自百度百科
2012-08-18 21:15
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:15 
首先建议使用 _exit

因为它不会做清理工作

就像二楼所说,父子使用同样的地址空间。

 子进程结束后return, 则把父进程的stack frame给破坏了

所以睡醒的父进程原本应该被返回,但苦于return address大概已经被破坏。

这种行为是未定义的,但很明显你的程序的这种未定义行为是重复执行main函数

所以把最后一个return 0 改为 exit(0)

[ 本帖最后由 madfrogme 于 2012-8-18 23:35 编辑 ]

The quieter you become, the more you can hear
2012-08-18 22:05
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
收藏
得分:5 
内核问题

[ 本帖最后由 遗矢的老人 于 2012-8-18 22:46 编辑 ]
2012-08-18 22:33
快速回复:vfork的使用
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019559 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved