【发布时间】:2015-01-24 10:30:16
【问题描述】:
此程序用于创建最大编号。进程系统允许创建
好的,但我没有得到其他部分是什么
当我执行它时,我的系统会自动挂起启动??
有人可以解释一下下面的代码是如何工作的吗??
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
pid_t pid;
int i = 1;
for(;;)
{
pid = fork();
if(pid < 0)
printf("MAX no of concurrent process are %d\n",i);
if(pid == 0)
i++;
else
{
wait(0);
exit(0);
}
}
return 0;
}
【问题讨论】:
-
else 部分只会在父进程上运行。因此,它等待()它的孩子退出。
-
是的,但是 wait() 语句之后的 exit() 呢?
-
应该是
if(pid<0) { printf("..."); exit(0); } -
我看到的问题是发布的代码使用了所有可用的进程,然后在
fork失败后,它在没有子进程的进程上调用wait(0)。所以我预计wait永远不会返回,系统会因为无法创建更多进程而崩溃。 -
是的,在您的系统上运行 fork bomb 是确定进程限制的不好方法。即使按照我建议的更改,您的系统仍有可能在显示
printf之前崩溃。有更好的方法来确定进程限制。例如,请参阅 this discussion。