fork
読み:フォーク
外語:fork

 分岐すること。UNIXシステムコール(UNIX API)の一つで、子プロセスを生成するもの。
目次

概要
 UNIXでプロセスを生成する仕組みである。fork(2)システムコールを呼び出すことで行なう。
 このとき、プロセスのコピー生成作業を「forkする」のように呼び、作成されたプロセスが子プロセス、fork(2)を呼び出した元のプロセスを親プロセスという。

特徴
 プロセスの起動の基本原理は、次のようになる。
  1. fork()を行なう。
  2. プロセスが複製され、親子2つのプロセスが同じコードを並行して動作する状態になる。
  3. forkは親に対しては子のプロセスID、子に対しては0を返す(エラーなら-1)。
  4. forkの返値によって処理を分岐させる。
    1. 非0の値を得たほうのプロセス(親プロセス)は単にwait(2)で子の終了を待ったり、他の処理を続けたりする。
    2. 0を得たほうのプロセス(子プロセス)は子プロセスで実行すべきコードを実行したり、exec(2)系システムコールによって自分が実行するプログラムを置き換えたりする。

サンプル
 子プロセスとしてlsを実行し、結果のステータスを表示するサンプルを以下に例示する。
#include <unistd.h>
#include <sys/types.h>

int main(int argc, char* argv[])
{
    pid_t pid;

    pid = fork();
    if (pid == -1)
    {
        /* fork失敗。エラー。 */
        perror("fork failed.");
    }
    else if (pid)
    {
        /* 親プロセス。たとえば単に子を待つ。 */
        int status;
        wait(&status);
        printf("child existed:%d\n", status);
    }
    else
    {
        /* 子プロセス。別のプログラムを実行するなど。 */
        execl("/bin/ls", NULL);
    }
    return EXIT_SUCCESS;
}

再検索