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
相关产品推荐
相关产品推荐

