多进程的一种场景

多进程执行一段程序

std::vector<pid_t> pid_vector; 
    pid_vector.clear();

    pid_t p;
    int i = 0;

    for (i = 0; i < process_no; i++)
    {
        //创建进程
        p = fork();
        if (p == 0 || p == -1) 
        {
            break;//每次循环时,如果发现是子进程就直接从创建子进程的循环中跳出来,不让你进入循环,这样就保证了每次只有父进程来做循环创建子进程的工作
        }
        else
        {
            pid_vector.push_back(p);
        }
    }
    if (p == -1)
    {
        //error
        exit(0);
    }
    else if (p == 0) //每个子进程都会执行的代码
    {

        //sub process
        int ret = 0;

        clock_t startTime,endTime;  
        startTime = clock(); 

        //子进程去做事
        ret = process_one(i);
        endTime = clock();  
        std::cout << "----------Totle Time : " <<(double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << std::endl;  

        return ret;
    }
    else
    {
        //parent process

        int status = 0;

        for( std::vector<pid_t>::iterator  it=pid_vector.begin();it!=pid_vector.end();)
        {
            pid_t tmp_p = *it;

            printf("in parent, child pid = %d\n", tmp_p);

            waitpid( tmp_p, &status, 0);
            printf("in parent, child return = %d\n", status);

            it= pid_vector.erase(it);

        }

        printf("父进程id=%d\n",getpid());

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值