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

