2013-05-14 3 views
0

У меня есть несколько процессов для создания. Каждый сын должен создать двух сыновей. Я использовал рекурсивное решение, оно работает, но число созданных процессов не то, что я хочу.Как я могу создать «двоичное дерево процессов»?

Это то, что я пробовал:

void generate_kid(int g, int res){ 
    pid_t kid1, kid2; 
    int status1, status2; 
    if(res > 0){ 
    if(kid1 = fork()){ 
     if(res > 0){ 
     if(kid2 = fork()){ 
     } 
     else { 
      printf("I am %d, my father is %d\n",getpid(),getppid()); 
      generate_kid(g,res/2-1); 
     } 
     } 
    } 
    else { 
     printf("I am %d, my father is %d\n",getpid(),getppid()); 
     generate_kid(g,res/2-1); 
    } 
    } 
    waitpid(kid1,&status1,0); 
    waitpid(kid2,&status2,0); 
} 
+2

Показать, что вы пробовали и кто-то будет пытаться помочь вам. Мы не пишем для вас код здесь. – Barmar

+0

извините! это был мой первый вопрос! –

+1

Сколько процессов вы планируете создать, и сколько вы получаете вместо этого? – Barmar

ответ

1

Попробуйте это:

void generate_kid(int res){ 
    pid_t kid1, kid2; 
    int status1, status2; 

    if(res > 0){ 
    if ((kid1 = fork()) == 0) { 
     // child 
     printf("I am %d, my father is %d\n",getpid(),getppid()); 
     // generate half remaining rounded up for odd processes 
     generate_kid((res-1)/2); 
    } 
    else if (kid1 > 0) { 
     // parent - create second child 
     if(res > 1){ 
     if ((kid2 = fork()) == 0) { 
      // child 2 
      printf("I am %d, my father is %d\n",getpid(),getppid()); 
      // generate half remaining processes 
      generate_kid((res-2)/2); 
     } 
     else if (kid2 > 0){ 
      // parent 2 
      waitpid(kid2,&status2,0); 
     } 
     } 
     waitpid(kid1,&status1,0); 
    } 
    } 
} 
Смежные вопросы