フォークが時々親を返し、時には子を返すのはなぜですか?

フォークが時々親を返し、時には子を返すのはなぜですか?

新しいプロセスを生成する呼び出しを実行したときに成功したfork場合0(子プロセス)、または親プロセスを返します。

私はこれの後ろに隠れているアイデアを理解していません。なぜforkいつも返さないか、childいつもしますかparent

ベストアンサー1

を実行すると、fork()実行中のコードが両方のプロセスで実行されていることがわかります(フォークが成功したと仮定)。 1 つは親プロセス、もう 1 つは子プロセスです。fork()子プロセスでは0を返し、親プロセスでは子pidを返します。完全に決定的です。

これは、後でfork()親または子で実行されているかどうかを確認する方法です。 (また、親プロセスは子プロセスpidをどのように知ることができますか?ある時点でこれを待つ必要があります。)

もっと詳しく:

  • 将来の親プロセス呼び出しfork()
  • カーネルは新しいプロセスである子プロセスを作成し、さまざまな項目を適切に設定しますが、両方のプロセスが実行されています。同じコードそして、同じ関数が返されるまで「待機」します。
  • どちらのプロセスも引き続き実行されます。(必ずしもすぐではなく、同時に必ずしもそうではありませんが、それはポイントではありません):
    • fork()子プロセスに0を返します。子プロセスは引き続きこの情報を使用して、子プロセスであることを確認します。
    • fork()子プロセス pid は親プロセスに返され、親プロセスは引き続きその情報を使用して親プロセスであることを確認します。

おすすめ記事