CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

fork为何会出错,请指点

楼主FancyEagle(至远)2005-10-24 22:09:32 在 C/C++ / C语言 提问

 
  fork函数的使用,请指点  
   
  如下分别创建两个进程分别执行不同的函数,出错,请解释一下出错原因,谢谢!!  
   
  function()  
  {  
  .  
  .  
  /*其他语句*/  
  .  
  if(   (   pid   =   fork()   )   >   0   )  
  {  
          printf("pid[%d]\n",getpid());  
  }  
  else   if(   pid   ==   0)  
  {  
  function1(   );  
  }  
  else  
  {  
  return   -1;  
  }  
   
   
  if(   (   pid   =   fork()   )   >   0   )  
  {  
          printf("pid[%d]\n",getpid());  
  }  
  else   if(   pid   ==   0)  
  {  
  function2(   );  
  }  
  else  
  {  
  return   -1;  
  }  
  .  
  .  
  .  
   
  }  
   
   
   
   
   
  只能用这样的方式吗?  
   
  function()  
  {  
  .  
  .  
  .  
  for(n=0;   n<2;   n++)  
  {  
  if(   (   pid   =   fork()   )   >   0   )  
  {  
          printf("pid[%d]\n",getpid());  
  }  
  else   if(   pid   ==   0)  
  {  
  if(n   ==   0)  
  {  
  function1(   );  
  }  
  else   if(n   ==   1)  
  {  
  function2(   );  
  }  
  }  
  else  
  {  
            return   -1;  
  }  
  }  
  .  
  .  
  .  
  }  
   
   
   
  问题点数:20、回复次数:4Top

1 楼yzx1983(捕风捉影)回复于 2005-10-25 10:07:23 得分 0

没看出有什么逻辑上的区别  
  出什么错了?Top

2 楼mengge(踏岸寻柳)回复于 2005-10-25 10:33:24 得分 10

fork后进程一分为二,所以在fork时尽量不要使用这种for循环,会出现“意料不到”的情况。  
  第一次循环,一分为二;  
  第二次循环,有二为四;  
  ...  
  这里是几何数级,循环次数越多,新的进程就越多。  
   
  在第一个function();中,函数function1();被一个子进程执行了一次,函数function2();被一个新的子进程执行一次、孙进程执行一次;  
  在第二个function();中,函数function1();被一个子进程执行了一次,函数function2();被一个新的子进程执行一次、孙进程执行一次;  
   
  从效果上来看,是没有区别的。Top

3 楼Wolf0403(废人:独活十年~心如刀割)回复于 2005-10-25 11:13:30 得分 5

出错是出什么错?Top

4 楼wanguodu(足文字D)回复于 2005-10-25 12:07:56 得分 5

首先,请确认pid的类型为pid_t;  
  其次,fork()一般不会返回出错,除非内存紧张,分配不到创建pcb表和页表所需的内存。出错时应返回-1。Top

相关问题

  • 学学STL,但不知下面程序为何出错,请高手指点?
  • 请高手指点:为何字符串“1/1/2000”直接赋给一个DATETIME字段出错呢?
  • 我要改变数据库的编辑状态,但为何老出错!!请高手指点迷津!!!
  • 书上的一个关于数据封装的例题,为何运行出错?请高手指点。
  • 我对这段代码很困惑!!不知为何出错,请大虾指点一二!!!
  • jdk正确安装,path,classpath设置正确,为何编译HelloWorld.java还是出错,高手指点!
  • asp出错,寻高手指点。
  • 登录程序出错 请指点
  • 我出错太多了,请指点
  • SQLCE INSERT出错,请求指点

关键词

  • 函数
  • 执行
  • 循环
  • 出错
  • fork
  • 进程
  • pid
  • getpid
  • printf
  • else

得分解答快速导航

  • 帖主:FancyEagle
  • mengge
  • Wolf0403
  • wanguodu

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo