プロセス間通信#Linuxの##のフォーク

刻印(英語:としても翻訳フォーク、派生し分岐が)、UNIXまたは分岐機能Unixライクな、フォーク機能実行中のプログラムは2つ(ほぼ)完全に同じプロセスに分割されている、各プロセスは、コードから開始しますスレッドは、同じ位置の実行を開始します。2人のユーザーが同時にアプリケーションの2つのコピーを立ち上げたかのようなプロセスでは、これら2つのスレッドは、継続します。

新しいプロセスを作成するためのフォークシステムコールは、と呼ばれる子プロセスは、このプロセスが呼び出され、同時に実行中のプロセス(と呼ばれるプロセスのforkシステムコール)である親プロセス新しい子プロセスを作成した後、2つのプロセスがフォーク(システムコールの次の命令)を実行します。同じPC(プログラムカウンタ)、同じCPUレジスタ、ファイルを開くには、親プロセスで使用したのと同じプロセスを使用しました。

これは、引数を取らないし、整数値を返します。以下の値が異なる戻りフォーク()です。

  • :失敗する子プロセスを作成します。
  • ゼロ:新しく作成された子プロセスに戻ります。
  • :親または発信者を返します。この値は、新しく作成されたIDの子プロセスを含んでいます。

コード、データ、およびプロセスに割り当てられたリソースを含む方法。ある元のプロセス、とほぼ同じプロセスを作成することにより、システムコールfork()関数は、2つのプロセスはまったく同じことを行うことができますが、初期パラメータまたは変数が渡された場合は、別の、2つのプロセスが異なることを行うことができます。

  プロセスは、ストアデータとコードにスペースなど新たなプロセスを与えるためにシステムが割り当てるリソース、関数の後フォーク()を呼び出します。その後、元のすべての値が異なる値は、元のプロセスをわずか数値、新しいプロセスの新しいプロセスにコピーされます。自分自身のクローンの同等。

我々は、古典的なケースを介してフォーク機構に精通してもよいです。次のコードは、GCCコンパイラを使用しています

#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"

int main()
{
    pid_t pid1;
    pid_t pid2;

    pid1 = fork();
    pid2 = fork();

    printf("pid1:%d, pid2:%d", pid1, pid2);
}

たとえば、次のように実行して生成した後fork_testのgcc -o fork_test fork_test.c。

9268、PID2:9269の結果は、親プロセスの出力がPID1であることを前提としています。その後、実行は、いくつかのプロセスの合計を実行しますが、いくつかの他のプロセスの結果を出力し、どのように

フォーク原理に従って(フォーク機能実行プログラムは、2つ(ほぼ)全く同一のプロセスに分割され、各処理スレッドが同じ場所からのコードの実行を開始し始めた。プロセスにおけるこれらの2つのスレッドが同じように、継続します2人のユーザが同時にアプリケーションの2つのコピーを開始しました)フォーク会議プログラムは、ABがまったく同じリソースで、2つのコピーを切る2つの部分に分けられます。

1)場合、A = PID1フォーク()へ移行する; = 9268 PID1を得るためにB、ケースAのプロセスのコピーを作成し、BプロセスAのプロセス同期リソース。PID1 = 0、PID2 = 0

  • A:PID1 = 9268、PID2 = 0
  • B:PID1 = 0、PID2 = 0

2)場合A PID2 =フォーク()に移行すると、Cのコピーを作成する場合、この時間は、プロセスPID2 = 9269、C A工程同期処理リソースを得ました。= 9268 PID1、PID2 = 0

  • A:PID1 = 9268、PID2 = 9269
  • B:PID1 = 0、PID2 = 0
  • C:PID1 = 9268、PID2 = 0

3)場合B PID2 =フォーク()へ移行する; PID2 = 9270を得るために、この時点で、プロセスBをB1のコピーを作成し、B1 B処理同期処理リソース。PID1 = 0、PID2 = 0

  • A:PID1 = 9268、PID2 = 9269
  • B:PID1 = 0、PID2 = 9270
  • C:PID1 = 9268、PID2 = 0
  • B1:PID1 = 9268、PID2 = 0

次のようにプログラムの結果は以下のとおりです。

 

公開された170元の記事 ウォンの賞賛207 ビュー459万+

おすすめ

転載: blog.csdn.net/xiaoting451292510/article/details/103766712