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

如何改写forkexetest.c创建两个执行childtest的子进程(子进程不超3个)

改写forkexetest.c实现双进程exec并控制进程总数

要实现创建两个子进程且均通过exec调用childtest,同时保证总进程数不超过3(父进程+2个子进程),只需对原forkexetest.c做如下修改:

改写后的完整代码

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

int main(void){
    int pid, cpid;
    int status;
    int i;

    // 循环创建2个子进程
    for(i = 0; i < 2; i++){
        pid = fork();
        if(pid == -1){ 
            perror("fork error");
            exit(-1);
        }
        if(pid == 0){ 
            // 子进程直接执行childtest,替换当前进程映像,不会再创建新进程
            execl("./childtest", "childtest", (char *)NULL);
            perror("exec error");
            exit(-1);
        }
        // 父进程继续循环创建下一个子进程
    }

    // 父进程执行自身逻辑
    printf("[parent] process pid=%d...\n", getpid());
    for(i = 0; i < 5; i++){ 
        printf("[parent] %d\n", i);
        sleep(1);
    }

    // 等待所有子进程结束,避免僵尸进程
    for(i = 0; i < 2; i++){
        cpid = wait(&status); 
        if(cpid == -1){
            perror("wait error");
            exit(-1);
        }
        printf("[parent] child process(%d) status %d\n", cpid, status>>8);
    }

    printf("[parent] process finished\n");
    return 0;
}

关键改动说明

  • 循环创建两个子进程:通过for循环执行两次fork,父进程每次fork后继续创建下一个子进程,子进程则立即调用execl执行childtest,替换自身进程映像,不会产生额外进程。
  • 等待所有子进程退出:新增循环调用wait,确保父进程等待两个子进程都结束后再退出,避免僵尸进程残留。
  • 保证进程总数不超过3:每个子进程在fork后直接执行exec,不会再创建新进程;父进程仅创建两个子进程,因此总进程数始终为父进程+2个子进程,共3个,符合要求。

注意事项

编译时需确保childtest已编译生成可执行文件,且与forkexetest在同一目录下,或在execl中指定完整路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:24:34