Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語のfork()関数で複数のプロセスを作成する方法

この記事では、C言語でfork()関数を使用して子プロセスを作成する方法を解説します。親プロセスと子プロセスのそれぞれで異なる処理を実行し、異なる値を出力させる方法についても見ていきましょう。

fork()の基本的な仕組み

fork()が呼び出されると、新しいプロセスが生成され、戻り値が返されます。この戻り値によって、現在実行中のコードがどちらのプロセスに属しているかを判別できます。

  • 戻り値が0より大きい場合:現在は親プロセス内にいます(戻り値は子プロセスのPID)
  • 戻り値が0の場合:現在は子プロセス内にいます
  • 戻り値が-1の場合:プロセスの作成に失敗しました

この仕組みを利用することで、1つのプログラム内で親プロセスと子プロセスの処理を分岐させることができます。

サンプルコード

#include <stdio.h>
#include <unistd.h>

int main() {
    int n = fork(); // プロセスを分割
    if (n > 0) { // nが0より大きい場合は親プロセス
        printf("Parent process \n");
    } else { // nが0の場合は子プロセス
        printf("Child process \n");
    }
    return 0;
}

実行結果

soumyadeep@soumyadeep-VirtualBox:~$ ./a.out
Parent process
soumyadeep@soumyadeep-VirtualBox:~$ Child process
soumyadeep@soumyadeep-VirtualBox:~$

実行結果のポイント

出力を見ると、「Parent process」と「Child process」の両方が表示されていることがわかります。fork()によってプログラムが2つのプロセスに分裂し、それぞれがif文の異なる分岐を実行したためです。

また、シェルのプロンプトと「Child process」の出力が混在して表示されています。これは、親プロセスが先に終了してシェルに制御が戻った後、子プロセスが出力を完了したためです。実際の開発では、wait()waitpid()を使って親プロセスが子プロセスの終了を待つようにすると、出力順序を安定させることができます。

  1. Python Tkinterでドロップダウンメニューを作成する方法

    ナビゲーションは、あらゆるアプリケーションにおいて最も重要な要素の一つです。洗練されたナビゲーションは、ユーザー体験を視覚的にも操作的にも大きく向上させます。Tkinterを使えば、メニューやサブメニューを非常に効率的に作成できます。Tkinterには、メニューを作成するための組み込み機能が用意されており、他のウィジェットやウィンドウから呼び出して利用できます。tkinter.Menuモジュールは、メニューアイテムに対してさまざまなプロパティを提供しています。これらのプロパティを使うことで、ボタンへのラベル付け、ボタンの状態切り替え、cascadeプロパティによるサブメニューの追加などが可能に

  2. Pythonで複数のファイル名を一括変更する方法【os.rename()活用】

    Python3では、rename()メソッドを使うことで、ファイルやディレクトリの名前を簡単に変更できます。このメソッドは標準ライブラリのosモジュールに含まれており、追加のインストールなしですぐに利用可能です。 os.rename() の基本構文 os.rename(src, dst) 各引数の意味は以下のとおりです。 src: 名前を変更したい元のファイル(またはディレクトリ)のパス dst: 変更後の新しい名前を含むパス それでは、複数の画像ファイルが入ったフォルダを例に、一括でファイル名を変更する方法を見ていきましょう。ここでは、次のような画像フォルダを使用します。 入力(変更前の