2017-11-06 5 views
0

imageのプロセスツリーを作成しようとしています。下に私が書いたコードがあります。それは正常に動作しますが、半分しか動作しません。私のコードの出力はsecond screenshotです。問題は、私が最後の世代を作る方法を知らないことです。私はあなたの質問が正しい理解していれば特定のプロセスツリーの作成

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <sys/wait.h> 


int main() { 
    int i; 
    int j; 

    pid_t ppid; 
    pid_t cpid; 
    ppid = getpid(); 
    printf("I'm the parent, my PID is: %d\n", ppid); 
    for (i = 0; i < 4; i++) { 
     ppid = fork(); 
     if (ppid == 0) { 
      printf("Hello, my PID is: %d, my parent's PID is %d\n", getpid(), getppid()); 
      for(j = 0; j < 2; j++) { 
       ppid = fork(); 
       if (ppid == 0) { 
        printf("Hello, my PID is: %d, my parent's PID is %d\n", getpid(), getppid()); 
        sleep(60); 
        printf("I'm process %d and I'm done\n", getpid()); 
        exit(0); 
       } 
      } 
      sleep(60); 
      printf("I'm process %d and I'm done\n", getpid()); 
      exit(0); 
     } 
    } 

    sleep(1); 
    printf("I'm process %d. Waiting for one of my children to complete", getpid()); 
    wait(NULL); 
    printf("Eltern: I'm done\n"); 
    printf("... and bye. \n"); 
} 

答えて

0

は、あなただけの最も内側のif文でforkを追加する必要があります。

  if (ppid == 0) { 
       printf("Hello, my PID is: %d, my parent's PID is %d\n", getpid(), getppid()); 

       // Add one more fork here 

       sleep(60); 
       printf("I'm process %d and I'm done\n", getpid()); 
       exit(0); 
      } 
+0

Thx。たぶんあなたはより多くの時間を助けることができます。各親プロセスが自分の子プロセスが完了するのを待っていることはどうすればできますか?私のコードでは、第一世代の親だけが子供を待っています。 –

+0

すべての 'exit'の直前に' wait'または 'waitpid'を試みましたか? – 4386427

+0

jep。待機(null)。ただ自分でそれに来た。どうも :) –

関連する問題