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

C语言父进程创建两个子进程分别运行不同程序及代码修改咨询

嘿,我来帮你搞定这个问题!要在C语言里让父进程创建两个分别跑不同逻辑的子进程,核心就是用fork()两次,然后在每个子进程分支里执行对应的函数或程序,父进程等着它们跑完就行。下面给你详细的方案和代码:

在C语言中创建两个执行不同程序/函数的子进程

核心逻辑

  • 调用两次fork()系统调用,每次生成一个新的子进程
  • 每个子进程分支里,直接调用你定义的execution1()或execution2();如果是要跑外部独立程序,就用exec系列函数
  • 父进程必须用wait()或waitpid()等待子进程结束,不然会产生僵尸进程

针对你的需求:让子进程分别执行execution1()和execution2()

这里是修改后的完整代码,每一步都加了注释,一看就懂:

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

// 先定义你的两个执行函数
void execution1() {
    printf("我是子进程1,PID:%d,正在执行execution1()\n", getpid());
    // 这里替换成你的业务逻辑
    sleep(2); // 模拟耗时操作,方便看效果
    printf("子进程1执行完毕啦\n");
}

void execution2() {
    printf("我是子进程2,PID:%d,正在执行execution2()\n", getpid());
    // 这里替换成你的业务逻辑
    sleep(1); // 模拟耗时操作
    printf("子进程2执行完毕啦\n");
}

int main() {
    pid_t pid1, pid2;

    // 创建第一个子进程
    pid1 = fork();
    if (pid1 == -1) {
        perror("创建子进程1失败");
        exit(EXIT_FAILURE);
    } else if (pid1 == 0) {
        // 这是子进程1的代码块
        execution1();
        exit(EXIT_SUCCESS); // 子进程跑完函数必须退出,不然会跑父进程的后续代码
    }

    // 创建第二个子进程
    pid2 = fork();
    if (pid2 == -1) {
        perror("创建子进程2失败");
        exit(EXIT_FAILURE);
    } else if (pid2 == 0) {
        // 这是子进程2的代码块
        execution2();
        exit(EXIT_SUCCESS); // 同上,子进程执行完必须退出
    }

    // 父进程的逻辑:等待两个子进程都结束
    printf("父进程PID:%d,等着子进程们完成任务...\n", getpid());
    wait(NULL); // 等待任意一个子进程结束
    wait(NULL); // 等待剩下的那个子进程结束
    printf("所有子进程都搞定啦,父进程退出\n");

    return 0;
}

你需要注意的几个点

  • fork()的返回值:父进程里返回子进程的PID,子进程里返回0,出错的话返回-1,一定要判断这个返回值,不然会出问题
  • 子进程必须退出:子进程执行完目标函数后一定要调用exit(),不然它会继续执行父进程后续的代码(比如再次创建子进程,这就乱套了)
  • 等待子进程:用两次wait(NULL)就能等完所有子进程,如果你想精准等待某个子进程,可以用waitpid(pid1, NULL, 0)和waitpid(pid2, NULL, 0)
  • 如果你的需求是让子进程跑外部程序(不是自定义函数),把execution1()换成exec系列函数就行,比如:
    // 子进程1执行ls -l命令
    char *args[] = {"ls", "-l", NULL};
    execvp("ls", args);
    // 如果exec函数返回了,说明执行失败了
    perror("执行外部程序失败");
    exit(EXIT_FAILURE);
    

编译运行这个代码,就能看到两个子进程分别执行不同的函数啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:05:52