子プロセス【child process】
概要

ここでいう「プロセス」(process)とは、実行中のプログラムをOSが管理する単位である。各プロセスは固有の「プロセスID」(PID)を持ち、専用のメモリ空間、変数などの内部状態、CPUの実行コンテキストをそれぞれ独立して保持する。同一のプログラムであっても、複数起動すればそれぞれ別個のプロセスとして扱われる。
任意のプロセスは、OSの機能を呼び出すシステムコールを用いて新たに子プロセスを生成することができる。生成された子プロセスには固有のPIDが与えられ、親のPIDと関連付けられる。起動時には親のメモリ空間が複製された専用の領域が与えられるほか、ファイルディスクリプタや環境変数なども親から引き継がれる。
生成の具体的な方式はOSによって異なる。LinuxなどのUNIX系OSでは、親プロセスを複製するfork()システムコールが用いられ、その後、exec()系のシステムコールで別のプログラムに置き換えることで、親とは異なる処理を子プロセスに実行させることができる。現代の実装では「コピーオンライト」(CoW:Copy-on-Write)方式によりメモリ複製の効率化が図られている。Windowsではこれに相当する操作をCreateProcess()関数が担う。
起動後の子プロセスは親から独立してスケジューリングされ、CPUや資源の管理もOSによって個別に行われる。子プロセスが終了するまで親プロセスが待機する場合と、親子が並行して動作する場合がある。一つの親が複数の子プロセスを生成することができ、子プロセス自身がさらに子プロセスを生成することもできる。この連鎖によってプロセスはツリー構造を形成する。Webブラウザが複数タブの描画処理を分担させる場合や、Webサーバが同時接続を並行処理する場合など、子プロセスの仕組みは様々な場面で活用されている。