- ベストアンサー
httpdの子プロセスがゾンビ化する原因とは?
- httpdの子プロセスがゾンビ化する原因について教えてください。
- httpdの子プロセスがゾンビ化する原因を具体的に教えてください。
- httpdの子プロセスがゾンビ化する原因について、一般的な事例を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ゾンビプロセス一般について書きます。 ゾンビプロセスとは、プロセスの実体は無いが、プロセステーブル(カーネルがプロセスを管理してる台帳)に エントリーがある状態を指します。 名簿に名前があるけど、本人は居なくなっちゃってる、と。 あるプロセスが終了したときには、必ず一瞬でもこの状態になります。 通常は、プロセスが終了したというシグナルが親プロセスに通知され、親プロセスが後始末を してあげて、めでたくゾンビ状態ではなくなるのです。 もし、親がシグナルを受けたときに適切な処理を行っていなければ、親プロセスが終了するか システムが再起動するまで、ゾンビ状態のままです。 > このゾンビ化してしまう原因として考えられるものを教えて下さい。 子プロセスからのシグナルを受けたときの処理がまずい、のが原因です。
その他の回答 (1)
- a-kuma
- ベストアンサー率50% (1122/2211)
> とのことですが、親プロセスを終了させれば、ゾンビとなった子プロセスは必ず全て > 終了されるものなのでしょうか? 私は、そのように理解していますが、これは確約されたことではなく、その unix の実装(と、障害)次第、となります。 また、setsid() を使ってプロセスグループを親と別にしてしまったプロセスが、もしも Zombie に なった場合(まず、ならない、と思いますが)には、親プロセスの終了は意味が無い(と思う)。 私も、知識の整理をかねて Web をうろうろしていたら、Solaris9 には preap なるコマンドがあって、 お掃除をしてくれそう。 # 収穫、収穫 :-)
お礼
確かに、仮にプロセスグループが異なっているとしたら、親プロセスの停止は子プロセスに 関係ありませんね。 具体的に事例を提示して頂き、とても判りやすかったです。 私の使用している Solaris8 では、残念ながら preap コマンドはまだ実装されていないようですが、 今後の参考にさせて頂きます。 ありがとうございました。
お礼
自力で調べた中にもシグナルについて触れてある資料はあったのですが、いま一つ頭の中で 整理しきれていなかったんです。 この回答を読んで、ようやくはっきりしました。ありがとうございました。 ところで、 > もし、親がシグナルを受けたときに適切な処理を行っていなければ、親プロセスが終了するか > システムが再起動するまで、ゾンビ状態のままです。 とのことですが、親プロセスを終了させれば、ゾンビとなった子プロセスは必ず全て 終了されるものなのでしょうか? もし宜しければ教えて下さい。