[C]for循环创建多进程execv并waitpid指定子进程退出

本文通过一个C语言程序示例介绍了如何使用fork()创建多个子进程,并使用waitpid()进行进程间的管理与同步。每个子进程执行不同的任务并通过/bin/echo命令输出,展示了进程间的基本通信机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

#define PROSSESS_NUM 3

int main(int argc, char *argv[])
{
    char * cmd[PROSSESS_NUM][PROSSESS_NUM] = 
    {
        {"any", "11111111111", 0},
        {"enjoyyouself", "22222222222", 0},
        {"any", "33333333333", 0}
    };
    int i, j, status;
    pid_t pid[PROSSESS_NUM] = {0};
    pid_t wpid = 0;
    unsigned char sta[PROSSESS_NUM];
    for (i = 0; i < PROSSESS_NUM; i++)
        sta[i] = 1;
    for (i = 0; i < PROSSESS_NUM; i++)
    {
        if ((pid[i] = fork()) > 0)
        {
            printf("parent | child's pid=[%d]\n", pid[i]);
            while (i == PROSSESS_NUM -1)
            {
                if (sta[0] == 0 && sta[1] == 0 && sta[2] == 0)
                {
                    break;
                }
                for (j = 0; j < 3; j++)
                {
                    if (sta[j])
                    {
                        wpid = waitpid(pid[j], NULL, WNOHANG); //指定回收一个pid的进程
                        if (wpid == -1)
                        {
                            perror("waitpid error : ");
                            exit(1);
                        }
                        else if (wpid == pid[j])
                        {
                            printf("EXIT : pid=[%d]\n", pid[j]);
                            sta[j] = 0;
                        }
                    }
                }
            }
        }
        else
        {
            printf("----------------child  | pid [%d]\n", getpid());
            execv("/bin/echo",cmd[i]);
            exit(EXIT_SUCCESS);
        }
    }

    return EXIT_SUCCESS;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值