私はオペレーティングシステムと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()
。