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)不重要,它将永远不会执行。系统将在之前耗尽内存并将自身挂起直到死亡