CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  内核及驱动程序研究区

这个程序为什么会死循环?(附源代码)

楼主nancygreen(Nancy)2006-03-12 22:32:41 在 Linux/Unix社区 / 内核及驱动程序研究区 提问

#include<stdio.h>  
  int   main()  
  {  
        int   t;  
        unsigned   sum=0;  
        while(   t=fork()!=-1){  
                  printf("pid=%d   ",   getpid());  
                  sum++;  
        }  
        if(t==-1){  
                  perror("fork");  
                  printf("sum=%d",   sum);  
        }  
        exit(0);  
  }    
  我想让它算出系统最大还能支持开多少个进程,虽然没什么实际意义,但这个程序的结果并不理想!  
  它为什么会死循环??? 问题点数:20、回复次数:10Top

1 楼fierygnu(va_list)回复于 2006-03-12 22:40:34 得分 1

while(   t=fork()!=-1){  
  应该是  
  while(   (t=fork())   !=-1){  
  =的优先级最低。Top

2 楼nancygreen(Nancy)回复于 2006-03-12 23:05:37 得分 0

改了以后,还是死循环Top

3 楼fierygnu(va_list)回复于 2006-03-13 09:41:50 得分 0

死循环?系统死了吗?Top

4 楼yzx1983(捕风捉影)回复于 2006-03-14 13:21:50 得分 0

说说具体现象,怎么就“死循环”了?Top

5 楼tengulre(debian core developer)回复于 2006-03-14 14:48:11 得分 15

在while里面加个定时器sleep(1);Top

6 楼victor03(dullboy)回复于 2006-03-14 15:11:10 得分 2

应该是系统死了!程序好像在做细胞分裂,fork后父,子进程都会继续fork,很快系统的资源就会耗光了吧!Top

7 楼eduyu(杜宇)回复于 2006-03-14 19:04:44 得分 2

进程是指数级增加呀。因为子进程又会分裂,所以你理论得到的结果是死机的时候所有这个程序fork和来的所有程序和本身这个程序打印出来数目的总和。麻烦。换个算法或者方法吧。Top

8 楼nancygreen(Nancy)回复于 2006-03-20 14:31:10 得分 0

这个程序是能很多用尽系统资源,但因为操作系统内存管理,任务调度机制的完善,它并不会死机,只不过CPU总是100%的在工作着。有时候还会出现  
  out   of   memory:   killed   process   1186(sendmail)  
  out   of   memory:   killed   process   1020(portmap)  
  ...................................  
  这样的系统提示。但没关系,它还能继续运行,因为init会去清除那些僵死进程。它会不停的运行,但永远都不会停止,出现不了fork()==-1的状态。  
  当它在后台运行过程中我也试图插进别的shell命令,系统有时会提示:  
  -bash:   fork:   Resource   temporarily   unavailable  
  应该是说系统资源不够了,不能再fork了,但那个程序为什么不正常终止呢?  
   
  其实这个程序算法上没什么问题,就是要指数增长,这样才能快速算出我要的值。问题是父进程不能比子进程早结束,不然那些僵进程会被init自动清空。  
  wait()或waitpid()只能等到一个子进程结束或一个信号来就唤醒父进程。有没有什么方法让父进程等到它所创建的所有子进程结束后再被唤醒?Top

9 楼nancygreen(Nancy)回复于 2006-03-20 17:53:05 得分 0

帖一个完整的这个程序执行中#ps   -al命令得到的结果。很迷惑怎么中间怎么会出现这样的结果?那些PPID为1的,它们的父进程一定是非正常结束?到底是什么原因引起的非正常结束?是因为fork不成功吗?按照这个程序流程,不成功就是正常结束,还有什么不非正常结束的可能?  
   
  F   S       UID       PID     PPID     C   PRI     NI   ADDR         SZ   WCHAN     TTY                     TIME   CMD  
  4   R           0     7597     1237     2     81       0         -       335   -             tty1           00:00:00   t  
  5   Z           0     7598     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0     7601     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0     7603     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0     7605     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0     7613     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0     7619     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0     7676     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0     7686     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0     7692     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0     7694     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0     8413     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0     8422     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0     8428     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0     8430     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0     9621     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0     9631     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0     9635     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0     9637     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   10130     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   10140     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   10146     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   11286     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   11295     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   11301     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   11851     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   11860     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   11866     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   11868     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   12847     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   12857     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   12863     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   12865     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   13405     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   13415     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   13420     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   13422     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   14255     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   14265     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   14269     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   14271     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   14762     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   14772     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   14778     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   14780     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   15706     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   15715     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   15721     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   15723     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   16147     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   16155     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   16159     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   16161     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   17290     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   17297     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   17302     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   17304     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   17620     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   17630     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   17633     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   17635     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   18885     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   18893     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   18897     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   18899     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   19225     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   19235     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   19238     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   19240     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   20410     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   20419     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   20425     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   20427     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   20844     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   20852     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   20856     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   20858     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   21952     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   21962     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   21968     7597     0     83       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  Top

10 楼nancygreen(Nancy)回复于 2006-03-20 17:58:26 得分 0

接上页,才知道这里发帖有长度限制,那就省略一点吧,把不太一样有变化的帖出来,如果都帖有640行  
   
  F   S       UID       PID     PPID     C   PRI     NI   ADDR         SZ   WCHAN     TTY                     TIME   CMD  
  5   Z           0   25711   22342     0     84       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   26705   26704     0     85       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   R           0   26706           1     0     85       0         -       335   -             tty1           00:00:00   t  
  5   R           0   26708           1     0     85       0         -       335   -             tty1           00:00:00   t  
  5   Z           0   26721   26720     0     85       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   R           0   26724           1     0     85       0         -       335   -             tty1           00:00:00   t  
  5   Z           0   26727   26720     0     85       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   26730   25128     0     84       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   26734   25128     0     84       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   R           0   27270           1     0     85       0         -       335   -             tty1           00:00:00   t  
  1   R           0   27273           1     0     85       0         -       335   -             tty1           00:00:00   t  
  1   R           0   27274           1     0     85       0         -       335   -             tty1           00:00:00   t  
  5   Z           0   27275   25126     0     84       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  1   R           0   27279           1     0     85       0         -       335   -             tty1           00:00:00   t  
  5   Z           0   27281   25126     0     84       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   R           0   27282           1     0     85       0         -       335   -             tty1           00:00:00   t  
  5   Z           0   27284   23542     0     84       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  1   R           0   27289           1     0     85       0         -       335   -             tty1           00:00:00   t  
  5   Z           0   27294   23542     0     84       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   27299   23542     0     84       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   Z           0   27303   23893     0     84       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   R           0   27307           1     0     85       0         -       335   -             tty1           00:00:00   t  
  5   Z           0   27312   23893     0     84       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  5   R           0   27315           1     0     85       0         -       335   -             tty1           00:00:00   t  
  5   Z           0   27318   23893     0     84       0         -           0   do_exi   tty1           00:00:00   t   <defunct>  
  1   R           0   27328           1     0     85       0         -       335   -             tty1           00:00:00   t  
  5   R           0   27332           1     0     85       0         -       335   -             tty1           00:00:00   t  
  5   R           0   27337           1     0     84       0         -       335   -             tty1           00:00:00   t  
  5   R           0   27343           1     0     85       0         -       335   -             tty1           00:00:00   t  
  1   R           0   27355           1     0     85       0         -       335   -             tty1           00:00:00   t  
  5   R           0   27372           1     0     85       0         -       335   -             tty1           00:00:00   t  
  5   R           0   27377           1     0     85       0         -       335   -             tty1           00:00:00   t  
  5   R           0   27379           1     0     85       0         -       335   -             tty1           00:00:00   t  
  1   R           0   27387           1     0     85       0         -       335   -             tty1           00:00:00   t  
  Top

相关问题

  • //super 指代什么??附源代码一个ftp粘贴程序
  • 求《MFC windows程序设计》附书源代码!谢谢
  • 谁有 win32多线程程序设计 的附书源代码?
  • 谁有 win32多线程程序设计 的附书源代码?
  • 求《win32多线程程序设计》附源代码。
  • 求《windows程序设计》(第五版)的附书源代码
  • 托盘程序源代码!!
  • 为什么说我没有匹配的驱动程序哪?(内附源代码)
  • 寻找《MFC windows程序设计(第二版)》的附盘源代码
  • 聊天程序如何在广域网上运行?附完整源代码

关键词

  • 循环
  • 系统
  • t5z
  • exitty1
  • 进程
  • 程序
  • fork
  • 死循环
  • 非正常
  • 结束

得分解答快速导航

  • 帖主:nancygreen
  • fierygnu
  • tengulre
  • victor03
  • eduyu

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

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