これは非常に基本的な質問です。親プロセスは、2つの整数をそこに配置する共有メモリを作成し、次に共有メモリに移動してそれらの合計を計算する子をフォークします。これはすべて問題ありませんが、子供はどのようにして合計の計算が完了したことを親に通知しますか?これを行うには、2つのプロセス間にパイプを作成する必要がありますか?またはwaitpid()はこれを達成するのに十分ですか?
ありがとうございました!
合計を書き込んだ後に子が終了する場合は、waitpid()
それで十分です。それ以外の場合は、完了を通知するために何らかの IPC (ミューテックス/セマフォ/パイプ) が必要です。
waitpid()
この目的には問題ないはずです。単に fork し、親で実行waitpid()
し、子で同じことを共有メモリの場所に計算し、戻ってwaitpid()
ブロックを解除し、親はその合計で必要なことを何でもできます。
整数の合計を計算した後に子プロセスが不要になった場合は、main から合計を返すことができ、親プロセスは waitpid を使用して結果を取得できます。この場合、子は次のようになります。
子プロセス:
int main(int argc, char** argv) {
int a,b;
/* read integers a and b from shared memory */
/* return sum */
return a + b;
}
子プロセスが親のためにさらに作業を行う必要がある場合は、子プロセスと親プロセスの間にパイプを設定するか、他の形式の IPC を手配して情報をやり取りします。