使用fork()一次在系统上激活的最大并发进程数

时间:2014-11-26 07:21:14

标签: 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(;;)
    {
        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;
}

1 个答案:

答案 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
}

无法创造另一个孩子的孩子会正常退出,所以父母也会这样做。