多进程的一种场景

多进程执行一段程序

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());

    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章