Help us understand the problem. What is going on with this article?

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

自分の記録用

環境

さくらレンタルサーバー
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)

ninoko1995
vueとswiftと少しpythonも勉強中。
bebit
ユーザ視点からの価値創出を追求するエクスペリエンス・デザイン・パートナー
https://www.bebit.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away