dポイントプレゼントキャンペーン実施中!

forkした後の子プロセス管理で、終了をsignalで管理しようと思ってるんですが、forkを2回行なえばゾンビ化を防げると書いてありました。この二つの方法に違いはあるんですか?メリット・デメリットがよくわかりません。ちなみに子プロセスからの結果や終了を待つ様なプログラムではなく、ただexec関数での別処理を行なうために子プロセスを作成するだけです。
宜しくお願いします。

A 回答 (2件)

forkを2回というのは孫プロセスを作ってそれに作業させるということでしょうか。


この場合、子プロセスを終了させてしまうと孫プロセスの親プロセスはinitd(PID=1)になります。孫プロセスの終了時にはinitdが処理してくれるので自プロセスは何もしなくとも良いということでしょう。
# 子プロセスの終了は待たないといけないが孫プロセスの起動だけなので短時間に済む
    • good
    • 0

unix系OSの前提でいいんですよね。


子プロセスは、実行が終了してもその終了シグナルを親プロセスがwaitで捕まえてくれるまでゾンビ状態で残ります。forkが1回の場合は間違いなく親のほうでwaitしてやらないといけません。親が先に終わるのならしなくてもいいですが。

forkを2回ということは、子プロセスは孫を作るとすぐに終了して、実際の処理は孫プロセスがやるわけですが、孫の親である「子」が終了した時点で、孫の親はinitプロセスが引き継ぎますので、waitを行うのはinitプロセスが代行してくれます。

まあ、好き好きでどちらでもいいと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!