アプリ版:「スタンプのみでお礼する」機能のリリースについて

httpdは複数の子プロセスを生成しますが、この子プロセスがゾンビプロセス化してしまう
ことがあります。
このゾンビ化してしまう原因として考えられるものを教えて下さい。

『何らかの理由で子プロセスが停止せずに親プロセスが停止した』等、あいまいな答えでも
構いません。もちろん具体的であれば、とても助かりますが…。

思いつく限りいくつでも構いませんので、教えて下さい。

ちなみに、私が使用しているマシンで上記現象が発生している訳ではなく、一般的な事例として
子プロセスのゾンビ化の原因になり得る事象を知りたいと思っていますので、構成情報などは
あまり気にせずに答えて頂けると幸いです。

よろしくお願いします。

A 回答 (2件)

ゾンビプロセス一般について書きます。



ゾンビプロセスとは、プロセスの実体は無いが、プロセステーブル(カーネルがプロセスを管理してる台帳)に
エントリーがある状態を指します。

名簿に名前があるけど、本人は居なくなっちゃってる、と。

あるプロセスが終了したときには、必ず一瞬でもこの状態になります。
通常は、プロセスが終了したというシグナルが親プロセスに通知され、親プロセスが後始末を
してあげて、めでたくゾンビ状態ではなくなるのです。

もし、親がシグナルを受けたときに適切な処理を行っていなければ、親プロセスが終了するか
システムが再起動するまで、ゾンビ状態のままです。

> このゾンビ化してしまう原因として考えられるものを教えて下さい。

子プロセスからのシグナルを受けたときの処理がまずい、のが原因です。
    • good
    • 0
この回答へのお礼

自力で調べた中にもシグナルについて触れてある資料はあったのですが、いま一つ頭の中で
整理しきれていなかったんです。
この回答を読んで、ようやくはっきりしました。ありがとうございました。

ところで、
> もし、親がシグナルを受けたときに適切な処理を行っていなければ、親プロセスが終了するか
> システムが再起動するまで、ゾンビ状態のままです。
とのことですが、親プロセスを終了させれば、ゾンビとなった子プロセスは必ず全て
終了されるものなのでしょうか?
もし宜しければ教えて下さい。

お礼日時:2003/02/19 09:25

> とのことですが、親プロセスを終了させれば、ゾンビとなった子プロセスは必ず全て


> 終了されるものなのでしょうか?

私は、そのように理解していますが、これは確約されたことではなく、その unix の実装(と、障害)次第、となります。

また、setsid() を使ってプロセスグループを親と別にしてしまったプロセスが、もしも Zombie に
なった場合(まず、ならない、と思いますが)には、親プロセスの終了は意味が無い(と思う)。

私も、知識の整理をかねて Web をうろうろしていたら、Solaris9 には preap なるコマンドがあって、
お掃除をしてくれそう。

# 収穫、収穫 :-)

参考URL:http://docs.sun.com/db/doc/816-0210/6m6nb7mi1?l= …
    • good
    • 0
この回答へのお礼

確かに、仮にプロセスグループが異なっているとしたら、親プロセスの停止は子プロセスに
関係ありませんね。
具体的に事例を提示して頂き、とても判りやすかったです。

私の使用している Solaris8 では、残念ながら preap コマンドはまだ実装されていないようですが、
今後の参考にさせて頂きます。

ありがとうございました。

お礼日時:2003/02/19 10:42

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