私の質問は次のとおりです。
1.) 親プロセスを常に最後に終了させるにはどうすればよいですか? 親が実行される最初のpidであるため、これは達成されていませんが、変更方法がわかりません。
2.) 子プロセスを彼のように同時に実行するにはどうすればよいですか? 単なる偶然かどうかを確認するために、数値を非常に高く上げてみましたが、そうではないようです。
編集:ソリューション
1.) 内部デフォルトに 2 回の wait(NULL) の追加
2.) が発生していました。それを証明するために sleep(1) を使用しました。
私のコードは次のとおりです
#include <stdio.h>
int main() {
int pid, i;
pid = fork();
switch(pid) {
case -1:
// error
printf("Fork error");
break;
case 0:
// child process
printf("First child is born, my pid is %d\n", getpid());
for(i=1; i<10; i++)
printf("First child executes iteration %d\n", i);
printf("First child dies quietly.\n");
break;
default:
// parent process
printf("Parent process is born, my pid is %d\n", getpid());
pid = fork();
switch(pid) {
case -1:
// error
printf("Fork error");
break;
case 0:
// child process
printf("Second child is born, my pid is %d\n", getpid());
for(i=1; i<10; i++)
printf("Second child executes iteration %d\n", i);
printf("Second child dies quietly.\n");
break;
default:
// parent process
printf("Parent process dies quietly.");
}
}
return 0;
}
私の出力は常に次のようになります。
親プロセスが誕生しました。私の pid は 7847 です 最初の子供が生まれました、私の pid は 7848 です 最初の子が反復を実行: 1 最初の子が反復を実行: 2 最初の子が反復を実行: 3 最初の子が反復を実行: 4 最初の子が反復を実行: 5 最初の子が反復を実行: 6 最初の子が反復を実行: 7 最初の子が反復を実行: 8 最初の子が反復を実行: 9 最初の子が反復を実行: 10 最初の子供は静かに死にます。 親プロセスは静かに終了します。 2人目の子供が生まれました、私のpidは7849です 2 番目の子は反復 1 を実行します 2 番目の子は反復 2 を実行します 2 番目の子は反復 3 を実行します 2 番目の子は反復 4 を実行します 2 番目の子は反復 5 を実行します 2 番目の子は反復 6 を実行します 2 番目の子は反復 7 を実行します 2 番目の子は反復 8 を実行します 2 番目の子は反復 9 を実行します 2 番目の子は反復 10 を実行します 2番目の子供は静かに死にます。
私の課題は次のとおりです。
3 つのプロセス (2 つの子プロセスを作成する親プロセス) を作成する C プログラム ("procs.c") を作成します。
最初の子は次のことを行う必要があります。
表示「最初の子供が生まれました。私のpidは...」
「最初の子が反復 X を実行します」というメッセージを 10 回表示します。ここで、X は反復の回数です。
「最初の子供は静かに死ぬ」と表示します。
2 番目の子は、次のことを行う必要があります。
表示 "2 番目の子供が生まれました。私の pid は ..."
「2 番目の子が反復 X を実行します」というメッセージを 10 回表示します。ここで、X は反復の回数です。
「二人目の子は静かに死ぬ」と表示。
親プロセスは次のことを行う必要があります。
表示 "親プロセスが誕生しました。私の pid は ..."
最初の子を作成します
2 番目の子を作成します。
「親プロセスは静かに終了します」と表示します。
gcc を使用してプログラムをコンパイルし、実行可能ファイルに「procs」という名前を付けます。プログラムを数回実行し、2 つの子の出力がどのようにインターレースするかを確認します。
このプログラムの可能な出力は次のとおりです。
新星> ./procs 親プロセスが誕生しました。私の pid は 7847 です 最初の子供が生まれました、私の pid は 7848 です 最初の子が反復を実行: 1 最初の子が反復を実行: 2 最初の子が反復を実行: 3 最初の子が反復を実行: 4 最初の子が反復を実行: 5 2人目の子供が生まれました、私のpidは7849です 2 番目の子は反復 1 を実行します 2 番目の子は反復 2 を実行します 2 番目の子は反復 3 を実行します 最初の子が反復を実行: 6 2 番目の子は反復 4 を実行します 2 番目の子は反復 5 を実行します 2 番目の子は反復 6 を実行します 最初の子が反復を実行: 7 2 番目の子は反復 7 を実行します 2 番目の子は反復 8 を実行します 2 番目の子は反復 9 を実行します 2 番目の子は反復 10 を実行します 2番目の子供は静かに死にます。 最初の子が反復を実行: 8 最初の子が反復を実行: 9 最初の子が反復を実行: 10 最初の子供は静かに死にます。 親プロセスは静かに終了します。