fork

読み:フォーク
外語:fork 英語
発音:fɔ́:rk 英語
品詞:名詞

分岐すること。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;
}
関連する用語
プロセス

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club