多進程的一種場景

多進程執行一段程序

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

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