LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 774|回复: 8

为什么会死机 ? 刚接触fork

[复制链接]
发表于 2004-9-25 04:37:34 | 显示全部楼层 |阅读模式
  1. #include<stdio.h>
  2. #include<sys/types.h>
  3. #include<unistd.h>
  4. main()
  5. {
  6.   pid_t pid;
  7.   pid=fork();
  8.   int i;
  9.   for (i=0;i<100;i++)
  10.   {
  11.     if (fork() == 0)
  12.       printf("%d\t",getpid());
  13.     else if ( fork()>0 )
  14.       printf("%d\t",getpid());
  15.     else
  16.       printf("%d\t",getpid());
  17.   }
  18.   printf("\n");
  19. }
复制代码



我想占用很多进程,,可这个程序却使我死机.当时系统并没有在干什么剩下接近300m的内存

p4 2.4  512ddr
发表于 2004-9-25 10:54:34 | 显示全部楼层
昏倒!!!
发表于 2004-9-25 12:13:59 | 显示全部楼层
开2的100次方个进程?可以吗?
发表于 2004-9-25 12:28:04 | 显示全部楼层
最初由 bobhuang 发表
开2的100次方个进程?可以吗?

是2*100吧。
发表于 2004-9-25 13:15:25 | 显示全部楼层
最初由 锋锋 发表
是2*100吧。
no,比2的100次多


楼主上次只fork了一次,这次...晕!!!!
 楼主| 发表于 2004-9-25 16:09:57 | 显示全部楼层
最初由 yangtou 发表
no,比2的100次多


楼主上次只fork了一次,这次...晕!!!!




呵呵,那你就指导一下吗,我连概念都不清楚,

怎么那么容易就死机啊 ? 你们会吗??

那我轻易给人家这个运行一下,不就死机了 ??

给点意见好吗
发表于 2004-9-25 17:57:03 | 显示全部楼层
fork创建的子进程会执行fork()后的代码,楼主所创建的所有子进程会执行所有他后面的那些for
循环,也就是他们很他们的子进程会循环执行所有他们后面的fork,如果全部执行就会复制出2的
200次个(不知道对不对)进程。fork时子进程会复制所有父进程的资源,太多的进程同时运行就会
把资源耗尽。
发表于 2004-9-27 10:41:45 | 显示全部楼层
把if (fork() == 0)
      printf("%d\t",getpid());改成
if (fork() == 0)
{
printf("%d\t",getpid());
exit(0);
}

最前面的pid=fork();不要了
发表于 2004-10-4 13:04:17 | 显示全部楼层
今天又想到这个问题,改正一下我的错误,总共fork出2×3^100个进程,不过多少进程只是个数学问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表