2016-09-22 10 views
-3

私は3つの子プロセスをフォークするプログラムを書く必要があります。複数の子をフォークし、子プロセスが終了するまで待つ

親プロセスは、独自のPID情報を1回だけ表示し、子プロセスが終了するのを待ちます。

すべての子プロセスが終了すると、メインプロセスは「メインプロセスが終了しました」と表示して終了します。

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

int main(int argc, char *argv[], char *env[]) 
{ 
     pid_t my_pid, parent_pid, child_pid; 
     int status; 

    /* get and print my pid and my parent's pid. */ 

     my_pid = getpid(); parent_pid = getppid(); 
     printf("\n Parent: my pid is %d\n\n", my_pid); 
     printf("Parent: my parent's pid is %d\n\n", parent_pid); 

    /* print error message if fork() fails */ 
     if((child_pid = fork()) < 0) 
     { 
      perror("fork failure"); 
      exit(1); 
     } 

    /* fork() == 0 for child process */ 

     if(child_pid == 0) 
     { 
      execl("/bin/date", "date", 0, 0); 


      printf("This print is after execl() and should not have been executed if execl were successful! \n\n"); 

      _exit(1); 
     } 
    /* 
    * parent process 
    */ 
     else 
     { 
      printf("\nParent: I created a child process.\n\n"); 
      printf("Parent: my child's pid is: %d\n\n", child_pid); 
      wait(&status); /* can use wait(NULL) since exit status 
          from child is not used. */ 
      printf("\n Parent: my child is dead. I am going to leave.\n \n "); 
     } 

     return 0; 
} 
+2

これが緊急に必要な場合は、おそらくSOにトピック以外の質問をする代わりに、これをコーディングするのに時間を費やす必要があります。これは 'gimmetehcodez.biz'ではありません。私たちは、あなたがコード内の特定の問題に悩まされている場合、あなたがその研究と解決の試みをその問題の中で実証するならば、あなた自身で研究し解決しようとした後、あなたを助けることができます。しかし、私たちは**あなたのコードを書いていません**。 – Angew

+0

1つの子プロセスで動作させることは、開始するのに適しているようです。 – molbdnilo

+2

関連するCライブラリ呼び出しは、fork、system、waitpidです。行って、マニュアルページでそれらを見てください。またはRichard W. Stevensの著書「UNIX環境でのプログラミング」を読んでください。 –

答えて

-1

申し訳ありませんが、私はコメントを書いていますが、評判が十分ではありません。 親のpidを最初に表示したい場合はfork()の前にgetpid()を使用できます。waitpidを使用して刈り取りを行うことができます.3人の子供をすべて救うためにループが必要なことがあります。

+0

お願いしますか? –

関連する問題