「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

「ゾンビプロセス」と「孤児プロセス」の違い

スポンサーリンク

予備知識


用語意味
プロセスメモリを使って何かやっているプログラムひとつひとつ
親プロセスプロセスからプロセスが生まれたときの最初からいた方のプロセス
子プロセスプロセスからプロセスが生まれたときの後から登場した方のプロセス
プロセステーブル現在動いているプロセスの管理台帳

プロセスは「メモリを使って何かやっているプログラムひとつひとつ」です。
よく分からなければ「実行中のプログラム」と読み替えてください。
プログラムは動いていればメモリを使っています。


「ゾンビプロセス」と「孤児プロセス」の違い1

プロセスがお仕事を始めると、管理台帳に名前が記録されます。


「ゾンビプロセス」と「孤児プロセス」の違い2

お仕事が終わると、管理台帳から名前が消されます。


「ゾンビプロセス」と「孤児プロセス」の違い3

管理台帳を見れば、今どんなプロセスがお仕事中か分かるようになっているのです。


「ゾンビプロセス」と「孤児プロセス」の違い4

それぞれの用語の意味


用語意味
ゾンビプロセスもうお仕事は終わっているんだけど管理台帳にはまだ名前が残っているプロセス
孤児プロセスすでにがいないので管理台帳から名前が消せなくなっている状態のプロセス

似ているところ


どちらも、管理台帳上では「まだいるよ」状態になっているプロセスです。


「ゾンビプロセス」と「孤児プロセス」の違い5

また、孤児プロセスを指して「ゾンビプロセス」と表現している場合も あります。


「ゾンビプロセス」と「孤児プロセス」の違い6

違うところ


区別している場合は親プロセスの有無です。

ちょっと専門用語を使って説明しますが、親プロセス内で「fork()」というのをやると子プロセスが作られます。
このとき、管理台帳(プロセステーブル)に子プロセスの内容が記載されます。


「ゾンビプロセス」と「孤児プロセス」の違い7

子プロセスの処理が終了しました。
この時点ではプロセステーブルには、まだ子プロセスの内容が記載されています。
子プロセスの処理が終了した時点で、子プロセスはゾンビプロセスになるのです。


「ゾンビプロセス」と「孤児プロセス」の違い8

その後、親プロセスで「wait()」というのをやると、プロセステーブルから子プロセスの内容が消されます。


「ゾンビプロセス」と「孤児プロセス」の違い9

この時点で子プロセスは無事に成仏しました(-人-)
「wait()するとプロセステーブルから情報が消される」と覚えてください。

おっと、あるプロセスで問題発生です。
親プロセスがwait()しないで終了してしまいました。


「ゾンビプロセス」と「孤児プロセス」の違い10

おっと、別のプロセスでも問題発生です。
親プロセスが子プロセスより先に、さっさと終了してしまいました。


「ゾンビプロセス」と「孤児プロセス」の違い11

育児放棄というやつでしょうか。
いずれの場合も、このままでは子プロセスの名前をプロセステーブルから消せません。
wait()してくれる親プロセスが、すでにいないからです。


「ゾンビプロセス」と「孤児プロセス」の違い12

このような「育児放棄されて孤児になったプロセス」を(ゾンビプロセスと区別する場合は)「孤児プロセス」と呼びます。
孤児プロセスは、すでに親がいないのでプロセステーブルから名前を消せないプロセスです。

並べて書くと

ゾンビプロセス:処理が終了していてwait()待ちのプロセス
孤児プロセス:wait()しないで親プロセスが終了しちゃったプロセス


です。


個人的な使い分け


あまり使い分けは、していません。
孤児プロセスも「ゾンビプロセス」と表現することが多いです。
基本的には、それで通じるからです。


備考


孤児プロセスは長老に引き取られます。
すべてのプロセスのご先祖様である「initプロセス」というプロセスに引き取られ、以降はinitプロセスの子として扱われるのです。
そしてinitプロセスがwait()を実行したときに、プロセステーブルから情報が消されます。


スポンサーリンク
書籍画像007
書籍画像024


書籍画像
わわわ説明術コラム
宣伝だよ
エンジニア育成現場の「失敗」集めてみた。 42の失敗事例で学ぶマネジメントのうまい進めかた
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本
ソフトウェア開発現場の「失敗」集めてみた。 42の失敗事例で学ぶチーム開発のうまい進めかた