子プロセス

出典: フリー百科事典『ウィキペディア(Wikipedia)』

親プロセス から転送)

子プロセスとは、コンピュータプロセス管理に関わる用語で、ほかのプロセスから呼び出されたプロセスのことを言う。チャイルドプロセス (Child process)とも言い、呼出元のプロセスのことを親プロセスあるいはペアレントプロセス (Parent process)と呼ぶ。

マルチタスクOSに関してはプロセス管理の記事に詳しく述べられている。

MS-DOSPC DOSでも子プロセスと呼ばれるものが実装されていた。本稿ではこれについても述べる。

目次

[編集] MS-DOS の子プロセス

MS-DOSのアプリケーションソフトウェアの中には、それ自身をメモリの中に読み込んだまま、他のアプリケーションを起動する機能を有しているものがあった。(主にMS-DOSのシェルであるCOMMAND.COM

この場合、ペアレントプロセスとなる呼出元のアプリケーションはメモリ上に存在しているが実行は完全に停止している。子プロセスとして起動したCommand.comは、MS-DOS起動時に読み込まれたシェルとしてのCommand.comとは別のメモリ空間に存在し、親プロセスへはEXITコマンドで復帰することが出来た。主な用途としては、ワードプロセッサや表計算ソフトなどではフロッピーディスクのフォーマットを行うため、またテキストエディタなどででは前述のディスクフォーマットのためのほかに、アセンブラコンパイラなどの起動に使用された。

MS-DOSのアプリケーションや外部コマンドもシェルとしてのCOMMAND.COMの子プロセスとみなすことが出来る。

[編集] UNIX系システム

[編集] 子プロセス

子プロセスは、他のプロセス(親プロセス)によって生成されたプロセスである。

子プロセスは親プロセスから多くの属性(例えばオープン中ファイル)を継承する。UNIXでは、子プロセスは(forkを使って)親のコピーとして生成される。子プロセスはその後(execを使って)指定されたプログラムで自分自身をオーバーレイすることができる。

プロセスは多くの子プロセスを生成できるが、あるプロセスから見た親プロセスはひとつである。ただし、最初に生成されるプロセスには親がいない。UNIXではこの最初のプロセスが init であり、カーネルブート直後に起動し、システムシャットダウン時まで決して終了しない。

[編集] 親プロセス

親プロセスは、1つ以上の子プロセスを生成したプロセスである。

UNIXでは、0番のプロセス (swapper)以外は他のプロセスが forkシステムコールで生成したものである。forkを呼び出したプロセスが、それによって生成されたプロセスから見た親プロセスである。プロセスにはひとつの親プロセスがあるが、子プロセスは多数存在することもある。

カーネルは、プロセスをプロセス識別子 (PID)で識別する。0番のプロセスはシステムブート時に生成される特別なプロセスで、子プロセス(1番のプロセス)を生成した後は swapper プロセスとなる(SolarisSVR4.2MPではマルチスレッド化(正確にはマルチLWP化)され、カーネル内の各種定期処理をこなす)。1番のプロセスは init であり、システム内の他のプロセスの先祖になる。

[編集] 孤児プロセス

孤児プロセス (Orphan Process)は、親プロセスが先に終了してしまったプロセスを意味する。

UNIX系オペレーティングシステムでは、孤児プロセスは即座にinitプロセスを里親とされる。この操作をre-parenting(再育成)と呼び、自動的に行われる。技術的にはinitプロセスが親となっても、本来の親プロセスが既に終了していることから「孤児プロセス」と呼ばれ続ける。

RPCにおいて、クライアントが要求をサーバに送った後でクラッシュしたとき、サーバ側に残ってしまったプロセスを孤児プロセスと呼ぶ。この孤児プロセスはサーバの資源を無駄に占め、場合によってはサーバ全体の不調の原因となる。この対処方法として以下のものがある。

  1. 根絶 (extermination)が最も一般的な手法。この場合孤児プロセスは強制終了させられる。
  2. 再生 (reincarnation)はクライアントがリブートしたときにタイムスタンプをサーバに送信し、それを受けて孤児プロセスを終了する。
  3. 期限切れ (expiration)はタイマーを設定してその間に処理が完了しない場合に孤児プロセスを終了する。クライアントが応答しない以外の原因で処理が完了しないときは、タイマーを延長する。


他の言語