[ 通常表示 ]  [ 簡易表示 ]  [ シンプル表示 ]

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

孤児プロセス

pointこの用語のポイント

pointプロセスだよ

pointもう居ないのにまだ居ることになってるよ

point育児放棄されたやつだよ

スポンサーリンク

簡単に書くよ

孤児プロセスとは

いわゆる「ゾンビプロセス」のうち、特に育児放棄された状態のゾンビプロセスを指す用語。
もう少し噛み砕いて書くと

管理台帳から名前を消し忘れたプロセスのこと
であり

もういないのに「まだいるよ状態」になっているプロセスのうち、既に親がいない状態のプロセスのこと
です。

image piyo

詳しく書くよ

順番に見ていきましょう。

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

孤児プロセス

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

孤児プロセス2

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

孤児プロセス3

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

孤児プロセス4

なお、管理台帳に名前を書くのは、お仕事中のプロセス本人ではありません。
そのプロセスの親が、名前を書いたり、消したり、してくれます。

孤児プロセス5

繰り返しになりますが、管理台帳を見れば、お仕事中のプロセスが分かります。

孤児プロセス6

ただし、管理台帳の中身が必ずしも正確とは限りません。
たまに「お仕事は既に終わっているけど管理台帳には名前が残っているプロセス」がいるからです。
既にお昼寝をしているのに、管理台帳では仕事中になっている場合があります。

孤児プロセス7

さて、この「お仕事は既に終わっているけど管理台帳には名前が残っているプロセス」ですが、実は2種類あります。
それは

1.これから名前を消すプロセス
2.名前を消し忘れたプロセス


の2つです。

「1.これから名前を消すプロセス」は、お仕事終了直後のプロセスです。
名前を消すのは、お仕事を終了してからです。
お仕事を終了してから名前を消すまでにタイムラグがあります。

孤児プロセス8

「2.名前を消し忘れたプロセス」は、何らかの理由で名前を消し忘れたプロセスです。
うっかりミスってやつですかね。

孤児プロセス9

この2つの「お仕事は既に終わっているけど管理台帳には名前が残っているプロセス」のうち

2.名前を消し忘れたプロセス

を指す用語が「孤児プロセス」です。

こだわり派な人は

1.これから名前を消すプロセス:ゾンビプロセス
2.名前を消し忘れたプロセス:孤児プロセス


と呼び分けています。

ただし、世の中には呼び分けない人も少なくありません。
というか、呼び分けない人の方が多いはずです。

私も呼び分けていません。

1.これから名前を消すプロセス:ゾンビプロセス
2.名前を消し忘れたプロセス:ゾンビプロセス


と表現しています。
お仕事は既に終わっているけど管理台帳には名前が残っているプロセスは、すべて「ゾンビプロセス」です。

以上で孤児プロセスの大雑把な説明は終わりですが、せっかくなので、もう少し専門的な説明も書いておきます。
ここから先は、ちょっとばっかし小難しい説明になります。
よく分からない人は適当に読み飛ばしてください。

まず親プロセス内でfork()を実行すると子プロセスが作成されます。
そしてこのとき、プロセステーブルに子プロセスの内容が記載されます。

孤児プロセス10

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

孤児プロセス11

そして親プロセスでwait()が実行されると、プロセステーブルから子プロセスの内容が消されます。

孤児プロセス12

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

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

孤児プロセス13

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

孤児プロセス14

育児放棄ってやつでしょうか。
いずれの場合も、このままではプロセステーブルから子プロセスの名前を消せません。
親プロセスの名前は親プロセスの親プロセスがwait()すれば消えますが、子プロセスの名前は、お仕事が終了しているにもかかわらず、ずっと残り続けてしまいます。
wait()すべき親プロセスが既にいませんからね。

孤児プロセス15

このような、育児放棄されて孤児になったプロセスが、孤児プロセスです。
既に親がいませんので、プロセステーブルから名前を消せません。
親プロセスの育児放棄により、後始末をしてもらえなかったプロセスです。

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

以上が、少し専門的な孤児プロセスの説明です。

区別する人は

ゾンビプロセス:処理が終了していてwait()待ちのプロセス
孤児プロセス:親プロセスに育児放棄された(親が先に終了しちゃった)プロセス


と呼び分けているようです。

ただし、区別しない人の方が多いと思います。
一般的には「親プロセスに育児放棄された(親が先に終了しちゃった)プロセス」を指して「ゾンビプロセス」と呼びます。

image piyo2

一言でまとめるよ

まぁ「孤児プロセス」って単語が出てきたら「管理台帳から名前を消し忘れたプロセスなんだな~」と、お考えください。

一番上に戻るよ
スポンサーリンク