プロセスおよび fork() メソッド

プロセスおよび fork() メソッド

私はオペレーティングシステムとLinuxに初めて接する人なので、非常に基本的な質問かもしれませんが、答えを見つけることができません。

これまで読んだ資料によると、このfork()方法はオペレーティングシステムへのシステムコールを生成して新しいプロセスを生成します。生成されたプロセスは、呼び出しプロセスの正確なコピーです。

しかし、生成されたプロセス(子プロセス)と呼び出されるプロセス(親プロセス)がまったく同じではないと思います。親プロセスのメソッド 前のコードはfork()子プロセスにコピーされません。

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>

int main(void){
   X
   int child1 = fork();
   A
   B
   C
   D
   int child2 = fork();
   E
   F
   return 0; 
}

child2 プロセスには ABCD コード行は含まれていませんが、child1 プロセスには X 以外のすべての行が含まれています。実はこれは私の考えだ。一方、子プロセスは親プロセスの正確なコピーであることがどこでも知られています。

どちらが本当であるか誰が知っていますか?

答え1

fork()「二度戻ってください」。親プロセスは子プロセスのPIDを返します。子プロセスは0を返します。これはエラーがないと仮定します。つまり、コードを2回分岐すると合計4つのプロセスが生成されます。

fork(2)()で説明されている方法を除いて、手順はすべての点で同じですman 2 fork

たとえば、コードでは

while (1) {
   A
   B
   C
   fork();
}

A、そしてますます多くのプロセスによって実行されます(実際にこのようなコードを書かないでください。システムがロックされる可能性がありBますC)。

あなたの例では、これらの指示は子プロセスでも実行されますが、これらの指示を返すコードパスはありません。子プロセスは呼び出し時に親プロセスと同じであるため、fork()呼び出しコードで実行が開始されますfork()

関連情報