2011-06-17 4 views
0

fork()は、子プロセスを作成するために使用されます。この呼び出しは、子プロセスにも表示されます。フォークを呼び出すと実際に2回戻ってくると言うとき、私はそれが何を意味するのか理解していません。fork()コール、プロセスの複製

そして、これは何を意味する...

if (fork() == 0) 
/* the child process's thread executes here*/ 

else 
/*the parent process's thread executes here*/ 

は、親または子の上記のコード部分です。あなたは普通の英語で何が起こっているのか説明できますか?

また、なぜfork()を使用しますか?これは、このシステムコールによってUNIX上のすべてのプロセスが実行されていると言いますか? fork()どうすれば他のプログラムを実行できますか?あなたはプログラムの名前を指定しますか?

答えて

1

返り値が2回返されるのは、呼び出しが親プロセス(呼び出された)と子プロセス(子プロセスで1回)で返されるということです。親からのforkの呼び出しの行為は他の多くのものを継承したのと同じです。

コードスニペットは、親プロセスであるか子プロセスであるかによって、forkとは異なる戻り値を取得するという事実を利用しています。

子プロセスはゼロになり、親プロセスは子プロセスの非ゼロのプロセスIDを取得します。

何かの理由でforkが失敗した場合は、-1を返すこともできます。この場合、子が実行されません。それはおそらくあなたがチェックしなければならないものです。

そして、forkは新しいプロセスを作成するために使用されている間、それはそれらのプロセスに新しいプログラムをロード呼び出しのexec家族です:それを行うことができない自分自身でfork

プロセスの概要はhereです。

1

それは少し、このようなものだ:

Process 1    Process 2 

int main() { 
    ... 
    int x = goo(); 
    ... 
    int y = fork(); 
    // fork() returns... // ... but also here! 

    // here y = 123   // here y = 0 
    if (y) {    if (y) { 
    // this happens   // false 
    } else {    } else { 
    // false    // this happens 
    }      } 

    int z = baz();   int z = baz(); 
    ...      ... 
    return 0;    return 0; 
}      } 

プロセス2が生活に来るとき、)プログラムは二回存在し、第二の方法は、フォークのリターン(から始まります。プログラムは両方のプロセスで同じなので、どのプロセスを使用しているかを区別する唯一の方法は、fork()の戻り値です。

関連する問題