Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 21085

【unix】ゾンビプロセス・孤児プロセスって何。

$
0
0

自分の記録用

環境

さくらレンタルサーバー
Flask 1.1.1
Werkzeug 0.16.0

やりたいこと

クライアントからリクエストがあった際に、

  • 親プロセス
    • forkで子プロセスを生成
    • クライアントに、responseを返す
    • 子の終了を待たずに、消滅
  • 子プロセス
    • クライアントから渡された処理を行う
    • 処理終了後、消滅

疑問点

親が先死ぬとゾンビだ孤児だが出ちゃって邪魔らしい?
double fork?みたいなことしなきゃいけないらしい?
といった記述があったので、実際に調べてみた。

結果

ゾンビプロセスとは

処理の終了した子プロセスで、親プロセスのwaitを待っている状態のプロセス。
子プロセスがforkされた段階でプロセステーブルに子プロセスが追加され、親プロセスのwaitをもって子プロセスはプロセステーブルから削除される。
つまり、処理は終了しているが親にwaitで引き取られていないプロセスのこと。

孤児プロセスとは

親プロセスが先に終了してしまい、親のwaitにより引き取られなくなった子プロセスのこと。親プロセスが先に死んでしまった子プロセスは、initプロセスにre-parentingされ、以後initプロセスが親プロセスとなる。
initプロセスは積極的にwaitを実施し、孤児プロセスを終了させる。

まとめ

つまり、親プロセスが常駐プロセスで、いろんなタイミングで子を作り、どのタイミングでwaitを呼べばわからないような場合に、ゾンビプロセスが大量にできてしまいシステムを圧迫する、ということっぽい。

今回実現したい機能では、先に親プロセスがさっさと死ぬため、子プロセスはinitにきちんと引き取られrて終了するだろうから、double forkとかしないでよさげ。

参考ページ

用語のイメージが掴みやすい

孤児プロセス
ゾンビプロセス

まとめとしてわかりやすい

yahoo知恵袋

double forkが必要な場合やその理由について

HATENA Blog : Double forkによるプロセスのデーモン化と、ファイル変更時の自動サーバーリロードの実装 (Python)


Viewing all articles
Browse latest Browse all 21085

Trending Articles