LoginSignup
2
3

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-11-24

自分の記録用

環境

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

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3