TL

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

ゾンビプロセスは終了済みなのに親に回収されず残る状態、孤児プロセスは親が先に死んだ子です。前者は wait での回収、後者は init による引き取りで処理されます。

中級ゾンビプロセス孤児プロセスプロセスOS最終更新: 2026-06-06
TL;DR要点だけ先に
  • 1.ゾンビプロセスは、終了したのに親がまだ終了状態を回収していない、抜け殻のプロセスです。
  • 2.親が子の終了を wait で受け取ると、ゾンビは回収(リープ)されて消えます。
  • 3.孤児プロセスは親が先に死んだ子で、init(PID 1)が親として引き取り面倒を見ます。

プロセスの終了と「後始末」

プロセスは終了しても、すぐに完全には消えません。終了したことと、その 終了ステータス(正常終了か、何番で終わったか) を、親プロセス が受け取るまで、OS は最小限の情報を残しておきます。

なぜなら、子を起動した親は普通「子がどう終わったか」を知りたいからです。親が子の結末を受け取る操作を wait(回収・リープ) と呼びます。

pid_t pid = fork();
if (pid == 0) {
    /* 子プロセス:何か処理して終了 */
} else {
    int status;
    wait(&status);   /* 親が子の終了を回収する */
}

この「終了したことを親が受け取る」までの隙間に、ゾンビという状態が生まれます。

ゾンビプロセス:回収待ちの抜け殻

ゾンビプロセス とは、すでに終了したのに、親がまだ wait で回収していない プロセスです。実行はとっくに終わっていて、メモリやファイルなどの資源も解放済み。残っているのは プロセステーブル上のエントリ(PID と終了ステータスを保持する小さな枠)だけです。

つまりゾンビは 「終了報告を親が受け取るのを待っている抜け殻」 であり、これ自体は 正常な一時状態 です。親が wait すれば、エントリも消えてゾンビは成仏します。

一瞬のゾンビは異常ではない

子が終了してから親が wait するまでのわずかな間、子はゾンビになります。これはプロセス終了の正常な過程の一部です。問題になるのは、親が wait を怠ってゾンビが消えずに溜まり続けるときだけです。

なぜゾンビが問題になるのか

ゾンビ1体はごく小さな存在です。それでも放置は危険です。

  • ゾンビは プロセステーブルのエントリを占有 し続ける
  • 親が wait をサボると、子が終わるたびに ゾンビが溜まる
  • プロセステーブルには上限があり、PID を食い尽くす と新しいプロセスを作れなくなる
親がwaitしない場合:
  子1 終了 → ゾンビ(残る)
  子2 終了 → ゾンビ(残る)
  子3 終了 → ゾンビ(残る)  ... エントリが溜まり続ける
ゾンビは kill では消せない

ゾンビはすでに死んでいるので、SIGKILL を送っても消えません。消す唯一の方法は親に wait させることです。親がバグで wait しないなら、その親を終了させて、ゾンビを init(PID 1)に引き取らせて回収させます。長時間動くプログラムでは、子の終了を確実に回収する(SIGCHLD を処理して wait する等)設計が必須です。

孤児プロセス:親が先に死んだ子

逆に、子よりも先に親が終了 してしまうこともあります。残された子を 孤児プロセス(orphan process) と呼びます。

孤児は放っておかれるわけではありません。OS が 親を付け替え、システムの先祖である init(PID 1) が新しい親になります(この引き取りを re-parenting と呼びます)。

用語状態誰が処理するか
ゾンビプロセス子が終了済み・親が未回収親が wait で回収
孤児プロセス親が先に終了・子は実行中init(PID 1)が引き取る

init は、引き取った子が終了したら自動的に wait してくれる ため、孤児はゾンビになって溜まりません。これにより、親に先立たれた子も最終的にはきちんと後始末されます。

なお、親が終了した時点で生きている孤児(まだ実行中)と、その後 init が回収するゾンビは別物です。孤児 → 親が init に変わる → 子が終了 → init が wait → 消える、という流れになります。

まとめ

  • ゾンビ は、終了済みだが親が 未回収 の抜け殻。残るのは終了ステータスを持つエントリだけ。
  • 親が wait(回収) すればゾンビは消える。kill では消せない。
  • ゾンビの放置は プロセステーブル/PID の枯渇 を招くため、確実な回収が必要。
  • 孤児 は親が先に死んだ子で、init(PID 1)が引き取り 後始末する。

プロセスの基礎は プロセスとスレッド、終了を伝える仕組みは シグナル も合わせてどうぞ。

OS Article

ゾンビプロセスと孤児プロセスを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

ゾンビプロセス

比較で見る軸

難易度: intermediate / カテゴリ: OS / タグ数: 4

導入後に効く点

親が子の終了を wait で受け取ると、ゾンビは回収(リープ)されて消えます。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
intermediate
カテゴリ
OS
タグ数
4

判断チェックリスト

  • 自社の用途が「ゾンビプロセス / 孤児プロセス」に近いか確認する。
  • 強みである「ゾンビプロセスは、終了したのに親がまだ終了状態を回収していない、抜け殻のプロセスです。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

ゾンビプロセス孤児プロセスプロセスOSゾンビプロセス孤児プロセスプロセスOS
参考: 公式情報