【みなしごプロセス】

孤児プロセス とは?

最終更新:
💡 元の親が終了し、新しい親へ引き継がれる子プロセス

親プロセスが先に終了して、元の親を失った子プロセス。Linuxでは新しい親に引き継がれ、近い祖先のサブリーパーか、initが引き取る。

📌 このページのポイント
親子関係と終了状態の違い 孤児:実行中の例 ゾンビ:未回収の例 元親 親 元の親は終了 実行中 子 子 実行中 子は終了・未回収 新しい親 サブリーパー / init 孤児とゾンビは重なる場合もある
左の緑の矢印は、新しい親が子を引き取ることを表します。孤児は元の親を失った関係、ゾンビは終了後の未回収の状態で、二者択一の分類ではありません。
ひよこ ひよこ
孤児プロセスって何?
ペンギン先生 ペンギン先生
元の親プロセスが終了して、親を失った子プロセスだよ。Linuxでは新しい親へ引き継がれる。図の左側は、元の親が終了した後も子が実行を続けている例だよ。
ひよこ ひよこ
新しい親は必ずPID 1なの?
ペンギン先生 ペンギン先生
Linuxでは、近い生存中の祖先にサブリーパーがいれば、そのプロセスが引き取るよ。サブリーパーは、子孫のプロセスを引き取って終了状態を回収するための役割。そうした祖先がいなければinitが親になるんだ。いつも同じPID 1だけとは限らないよ。
ひよこ ひよこ
ゾンビプロセスとは違うの?
ペンギン先生 ペンギン先生
ゾンビは実行を終えたのに、終了状態がまだ回収されず残っている状態だよ。孤児かどうかは親子関係、ゾンビかどうかは終了後の状態の話。ゾンビの元の親が終了すれば、その子も新しい親へ引き継がれるので、両方に関係する場合があるんだ。
ひよこ ひよこ
引き取られたら放置していい?
ペンギン先生 ペンギン先生
実行中の子が新しい親を持っても、処理を止めたり資源の利用をなくしたりする保証はないよ。不要な処理が残っているなら、状態を確認して管理する必要がある。新しい親が終了状態を回収することと、実行中の子を停止することは別なんだ。
ひよこ ひよこ
わざと孤児にすることもある?
ペンギン先生 ペンギン先生
古典的なデーモン化では、二度forkし中間のプロセスを終了させる手法があるよ。ただし端末から切り離すにはsetsidやファイル記述子の整理なども関わる。systemdが直接管理する形式では、この古典的な手順をそのまま行う必要はないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「孤児プロセス」って出てきたら「元の親が先に終了した子プロセス」と思えばだいたいOK!
📖 おまけ:英語の意味
「orphan process」 = 孤児プロセス
💬 orphan(孤児)のプロセスで、親を失った子プロセスを人間の孤児にたとえた名前だよ

参考資料

← 用語集にもどる