You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从单个父进程创建指定数量n个子进程?循环fork生成进程数异常

问题原因

你写的循环会让所有已经创建的进程都执行fork操作,才会出现总进程数达到8个(减去初始父进程共7个子进程)的情况:

  • i=0时,1个初始进程执行fork,总进程数变为2
  • i=1时,2个进程都执行fork,总进程数变为4
  • i=2时,4个进程都执行fork,总进程数变为8

解决方法

核心逻辑是只让初始父进程执行fork操作,子进程创建成功后直接跳出循环/退出,不参与后续的fork,示例代码如下:

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>

int main() {
    const int CHILD_NUM = 3; // 需要创建的子进程数量
    pid_t fork_ret;

    for (int i = 0; i < CHILD_NUM; i++) {
        fork_ret = fork();
        if (fork_ret < 0) {
            perror("fork调用失败");
            return 1;
        } else if (fork_ret == 0) {
            // 此处写子进程的业务逻辑
            printf("第%d个子进程创建成功,进程ID:%d\n", i+1, getpid());
            // 子进程执行完逻辑后直接退出,不进入下一轮循环
            return 0;
        }
        // 父进程不做额外处理,进入下一轮循环创建下一个子进程
    }

    // 父进程等待所有子进程退出,回收资源避免僵尸进程
    for (int i = 0; i < CHILD_NUM; i++) {
        wait(NULL);
    }
    printf("所有子进程执行完毕,父进程退出\n");
    return 0;
}

补充说明

  • 如果子进程不需要创建后立刻退出,也可以用break跳出循环,只要保证子进程不会执行后续循环的fork即可
  • 如果不需要等待子进程执行结果,也可以省略父进程的wait逻辑,不过生产环境建议加上避免资源泄漏

内容的提问来源于stack exchange,提问作者Agrudge Amicus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 16:18:03