2017-09-16 5 views
0

私はFork()の再帰関数を使ってツリーを実行しようとしています。しかし、最初の3つの子を生成することができます。 Tree PictureTree Fork()再帰

void process_tree(int level, char *child[], int n){ 
int i; 
int index = child[n]; 
int myP; 
int status; 

if(n >= level){ 
    exit(0); 
} else { 
    for (i=0; i < index; i++){ 
     myP = fork(); 
     switch(myP){ 
      case -1: 
       printf("fork failed\n"); 
       break; 
      case 0: 
       printf("Son - %d de %d\n\n", getpid(), getppid()); 
       n++; 
       process_tree(level, child, n); 
       break; 

      default: 
       break; 
     } 
    } 
    for (i=0; i< index; i++){ 
     wait(&status); 
    } 
} 
} 

int main(){ 
int level = 4; 
int n = 0; 
int child [] = {3, 2, 1, 1}; 
printf("[Father] -> [%d]\n\n", getpid()); 
process_tree (level, child, n); 
} 

答えて

1

あなたの再帰の終了が早まってプログラムを終了しているように見えます。再帰では、私はたいてい 'return'を使います。