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

C语言中如何用fork()让N个函数分别在独立子进程中并发运行?

实现方案

核心逻辑很简单,按顺序为每个目标函数调用一次fork(),父子进程按fork返回值走不同分支:

  • fork返回值小于0:创建进程失败,直接报错退出
  • fork返回值等于0:当前是子进程,执行对应目标函数,执行完成后调用exit()主动退出子进程,避免子进程进入后续的fork流程
  • fork返回值大于0:当前是父进程,记录子进程pid后继续创建下一个子进程即可
    所有子进程创建完成后,父进程循环调用wait(),直到所有子进程都被回收后再退出。

完整可运行代码

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h> // wait函数需要的头文件

int function1() {
    for(int i=0;i<3;i++){
        printf("Prints from: function 1: Prints something %d\n", i+1);
        sleep(1); // 模拟算法运行耗时,方便看到输出交错效果,可删除
    }
    return 0;
}

int function2() {
    for(int i=0;i<2;i++){
        printf("Prints from: function 2: Prints something %d\n", i+1);
        sleep(1);
    }
    return 0;
}

int function3() {
    for(int i=0;i<2;i++){
        printf("Prints from: function 3: Prints something %d\n", i+1);
        sleep(1);
    }
    return 0;
}

int function4() {
    for(int i=0;i<2;i++){
        printf("Prints from: function 4: Prints something %d\n", i+1);
        sleep(1);
    }
    return 0;
}

int main() {
    // 定义要执行的函数列表,要扩展N个进程直接修改这个列表即可
    int (*func_list[])() = {function1, function2, function3, function4};
    int func_num = sizeof(func_list)/sizeof(func_list[0]);

    for(int i=0; i<func_num; i++){
        pid_t pid = fork();
        if(pid < 0){
            perror("fork失败");
            exit(1);
        }else if(pid == 0){
            // 子进程执行对应函数,执行完直接退出
            func_list[i]();
            exit(0);
        }
        // 父进程无需额外操作,继续创建下一个子进程
    }

    // 父进程阻塞等待所有子进程执行完成
    int status;
    while(wait(&status) > 0);

    printf("所有子进程执行完毕,父进程正常退出\n");
    return 0;
}

说明

  • 代码中的sleep仅用来模拟算法运行耗时,方便直观看到不同进程输出交错的效果,实际使用时直接替换为对应算法逻辑即可
  • 子进程执行完目标函数后必须调用exit(),否则子进程会继续执行父进程的后续代码,导致创建多余的异常进程
  • 各个子进程运行完全独立,不需要额外处理内存隔离,符合你的需求
  • printf默认是行缓冲,只要输出内容带换行符,不会出现半行内容交错的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:27:03