C 使用fork()时系统上活动的最大并发进程数
此程序用于创建系统允许创建的最大进程数 好吧,好吧,但是我没有理解其他部分,里面发生了什么 当我执行它时,我的系统自动挂起启动 有人能解释一下下面的代码是如何工作的吗C 使用fork()时系统上活动的最大并发进程数,c,fork,C,Fork,此程序用于创建系统允许创建的最大进程数 好吧,好吧,但是我没有理解其他部分,里面发生了什么 当我执行它时,我的系统自动挂起启动 有人能解释一下下面的代码是如何工作的吗 #include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <sys/wait.h> int main() { pid_t pid; int i = 1; for(;;)
#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;
}
#包括
#包括
#包括
#包括
int main()
{
pid_t pid;
int i=1;
对于(;;)
{
pid=fork();
if(pid<0)
printf(“并发进程的最大数量为%d\n”,i);
如果(pid==0)
i++;
其他的
{
等待(0);
出口(0);
}
}
返回0;
}
在输入for
循环时,将尝试分叉该进程
成功后,在父进程中,fork()
返回子进程的PID。子项返回0
失败时,fork()
返回<0
。这件事应该妥善处理
在代码中,子进程递增“继承的”i
并继续执行下一个循环运行,但父进程等待其子进程并退出
这一切进展顺利,直到fork()
失败为止。然后您会得到一个输出,但代码仍然会继续,直到wait(0)
。它挂在那里,它的父母也是
如果你愿意
if(pid < 0) {
printf("MAX no of concurrent process are %d\n",i);
exit(0); // or return 0
}
if(pid<0){
printf(“并发进程的最大数量为%d\n”,i);
退出(0);//或返回0
}
无法创建另一个子进程的子进程将正确退出,其所有父进程也将正常退出。else部分将仅在父进程上运行。因此,它等待其子进程退出。是的,但是wait()语句之后的exit()应该是
if(pid)。我看到的问题是,发布的代码使用了所有可用的进程,然后在fork
失败后,它调用wait(0)
在没有子进程的进程上运行。因此我预计等待
将永远不会返回,系统将崩溃,因为它无法创建更多进程。是的,在系统上运行是确定进程限制的一种不好的方法。即使我建议进行更改,您的系统仍有可能在显示pr之前崩溃intf
。有更好的方法来确定进程限制。例如,请参阅。如果(pid<0)不重要,它将永远不会执行。系统将在之前耗尽内存并将自身挂起直到死亡