C言語のfork関数を使って並列処理を行う方法を解説

この記事では、C言語のfork関数について詳しく解説します。

fork関数の基本的な使い方や戻り値、親プロセスと子プロセスの関係について学ぶことができます。

さらに、fork関数の応用例として、プロセスの並列実行やデータ共有、プロセス間通信についても解説します。

また、fork関数の注意点や代替手段についても紹介します。

この記事を読むことで、C言語でプロセスを生成するための基礎知識を身につけることができます。

目次から探す

fork関数とは

fork関数の概要

fork関数は、新しいプロセスを作成するために使用されるC言語の関数です。

この関数を呼び出すと、呼び出し元のプロセスと同じプログラムのコピーが作成されます。

この新しいプロセスは、親プロセスと呼ばれ、元のプロセスは子プロセスと呼ばれます。

fork関数は、以下のようなプロトタイプで宣言されています。


#include <unistd.h>
pid_t fork(void);

fork関数は、成功すると新しいプロセスのプロセスID(PID)を返し、親プロセスと子プロセスで異なる値を返します。

エラーが発生した場合は、-1を返します。

fork関数の基本的な使い方

fork関数は、新しいプロセスを作成するために使用されるC言語の関数です。

親プロセスから呼び出されると、fork関数は子プロセスを作成し、親プロセスと子プロセスの2つのプロセスが同時に実行されるようになります。

fork関数の呼び出し方

fork関数は、<unistd.h>ヘッダーファイルに宣言されています。

以下はfork関数の呼び出し方の例です。


#include <stdio.h>
#include <unistd.h>
int main() {
    pid_t pid;
    pid = fork();
    if (pid == 0) {
        // 子プロセスの処理
    } else if (pid > 0) {
        // 親プロセスの処理
    } else {
        // fork関数の呼び出しに失敗した場合の処理
    }
    return 0;
}

fork関数の戻り値

fork関数の戻り値は、以下の3つのケースに分かれます。

  • 親プロセスの場合:子プロセスのプロセスID(PID)が返されます。
  • 子プロセスの場合:0が返されます。
  • fork関数の呼び出しに失敗した場合:-1が返されます。

上記の例では、fork関数の戻り値を変数pidに格納しています。

その後、pidの値によって処理を分岐させています。

親プロセスと子プロセスの関係

fork関数によって作成された親プロセスと子プロセスは、同じプログラムコードを実行しますが、それぞれ独立したメモリ空間を持ちます。

つまり、親プロセスと子プロセスは互いに影響を受けずに実行されます。

親プロセスと子プロセスの関係を理解するために、以下の例を考えてみましょう。


#include <stdio.h>
#include <unistd.h>
int main() {
    pid_t pid;
    pid = fork();
    if (pid == 0) {
        printf("子プロセス: PID = %d\n", getpid());
    } else if (pid > 0) {
        printf("親プロセス: 子プロセスのPID = %d\n", pid);
    } else {
        printf("fork関数の呼び出しに失敗しました。\n");
    }
    return 0;
}

上記の例では、親プロセスが子プロセスを作成し、それぞれのプロセスが自身のPIDを表示します。

実行結果は以下のようになります。

親プロセス: 子プロセスのPID = 1234
子プロセス: PID = 1235

親プロセスは子プロセスのPIDを取得し、子プロセスは自身のPIDを表示しています。

このように、親プロセスと子プロセスは独立して実行されることが確認できます。

1 2 3 4

目次から探す