11

今、fork()システムコールの仕組みを理解するのに問題があります。次のコードを書きます。

#include<stdio.h>
int main()
{
    int a, b;
    b=fork();

    printf("\n the value of b = %d",b);
}

このコードの出力は次のとおりです。

出力がこのようになる理由がわかりませんか?

その後、コードに行を追加するだけで、出力がまったく異なります。私のコードは次のとおりです。

int main()
{
    int a, b;
    b=fork();

コードを実行すると、出力は次のようになります 2389my name is manish

 the value of b = 0

今、私はfork()呼び出しの働きについて完全に混乱しています。

私の質問は次のとおりです。

  1. どのようにfork()動作しますか?
  2. fork()呼び出しの後、コントロールはどこに行きますか?
  3. 問題で書かれたコードの出力の理由を説明できる団体はありますか?
  4. の出力がb異なる場所で発生するのは、最初のコードで の出力が出力のb = 2260直前にありb = 0、 の値が のb = 2389直前ではないことを意味するのはなぜb = 0ですか?

問題 に 書か れ て いる コード の fork の 働き を 説明 し て ください .

4

4 に答える 4

5
  1. Fork は現在のプロセスのコピーを作成します。
  2. fork()オリジナルとコピーの両方が、呼び出された時点から実行を続けます。
  3. コードが 2 回実行されるため、print ステートメントも 2 回評価されます。コピーされたプロセスでは、 の値bは 0 です。元のプロセスでは、 の値はbコピーされたプロセスのプロセス ID です。
  4. プロセスが同時に実行を開始すると、オペレーティング システムによって個別にスケジュールされるため、実際にいつ実行されるかは保証されません。
于 2011-06-02T05:17:56.920 に答える
3
  1. フォークは OS によって実装されます。基本的に子プロセスを作成し、fork().

  2. 親プロセスは、ファイル プロセスのプロセス ID を受け取りますb=fork();。b にはプロセス ID があります。子プロセスの pid はゼロです。

  3. (および 4) 両方のプロセスを並行して実行することも、タイム スライスすることもできるため、出力は異なります。

これをチェックしてみてください: http://en.wikipedia.org/wiki/Fork_(operating_system )

于 2011-06-02T05:18:57.663 に答える
1

これから始めたほうがいい

ここに説明とコード例があります。

于 2011-06-02T05:19:02.553 に答える