EngineIT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。「fork()」は子プロセスを起動するシステムコール(プログラム⇒OSに対しての指令)の関数です。並列処理などが求められるケースにおいて使用されます。・fork()を実行すると、呼び出し元のプロセスを「複製」する事で新しいプロセスを生成します。・その際に生成された新しいプロセスは「子プロセス」、呼び出し元のプロセスは「親プロセス」と呼ばれます。・親プロセスと子プロセスはそれぞれ独立したメモリ領域で起動しますが、子プロセスの生成直後は親と子は全く同じ内容になっています(基本は完全なるコピー)。・ただし、親と子は一部異なる点もあり、以下はその例です。(例1)子プロセスは一意なPID(プロセスID)を持つ(親のPIDとも異なる)(例2)子プロセスは親プロセスのメモリロック(※注1)を引き継がない。(例3)リソース消費量(getrusage())や、プロセス起動時間(times())はゼロにリセットされる。(※注1)参考:メモリロックとは?(mlock()・mlockall()関数)RAMのアドレス空間(アドレスを保持する領域)の一部または全部をロックする事で、メモリのデータがスワップ領域(=ディスク上の仮想的なメモリ)にページング(スワップ領域への移動)される事を防ぎます。fork()(構文説明)・戻り値の型である「pid_t」はプロセスIDを扱うための型です(≒符号付き整数≒int)・fork()関数が正常終了すると、起動した子プロセスのPIDを返却します。・fork()関数が異常終了すると、「-1」を返却します。world~」出力後、子プロセスでも同様に出力するため2回表示されています。fork()forkでの親と子の待ち合わせプログラムにおいてfork()関数を使用する場合は、セットでwait()関数も使う必要があります。このwait()関数は親プロセス内で、子プロセスの処理の終了を待つために使用されます。一方で、子プロセスの処理を終了する際には、子プロセス内でexit()関数を実行します。子プロセスを生成後、親プロセスでは「子プロセスの終了待ち(wait)」を行います。(参考)fork()とforループを組み合わせて複数の子プロセスを起動するforループを使えば、必要な分だけ子プロセスを生成する事も出来ます。下記の例では子プロセスを4個生成しています。各子プロセスのPIDと、その親プロセスのPID(PPID)も表示しています。この時、全ての子プロセスは同じ親プロセスに所属します。下記の4行1セット(親プロセスPID出力⇒子プロセス終了待ち⇒子プロセスPID出力⇒子プロセス終了判断)が、forkの回数分だけ発生しています。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。EngineIT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。Reserved.Top。