此程序用于创建最大数量。允许进程系统创建
好的但是我没有得到其他部分
当我执行它时,我的系统会自动挂起启动??
有人可以解释一下以下代码是如何工作的吗?
#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;
}
答案 0 :(得分:1)
在进入for
循环时,尝试分叉该过程。
成功时,在父进程中,fork()
返回> 0
个孩子的PID。孩子返回0
。
失败时,fork()
会返回< 0
。这种情况应该妥善处理。
在您的代码中,子进程会递增&#34;继承的&#34; i
继续下一个循环运行,但父级等待其子级并退出。
这一切顺利到fork()
失败的程度。然后你得到一个输出,但代码仍然继续,直到wait(0)
。它挂起来,所有的父母也都挂了。
如果你愿意的话
if(pid < 0) {
printf("MAX no of concurrent process are %d\n",i);
exit(0); // or return 0
}
无法创造另一个孩子的孩子会正常退出,所以父母也会这样做。