質問

次のCプログラムの結果を伝える必要があります。

main()
{
    int pid, k, som;
    som = 0; k = 2;
    pid = fork();
    if(pid == 0)
        k=5;
    else
        wait(0);
    for(int i = 1; i <= k; i++)
        som += i;
    printf("%d", som);
}

最初の予想は3です。fork呼び出しが行われると、プロセスのメモリがコピーされ、両方のプログラムが実行されます。子プロセスは実行されますが、kはまだ2に等しいため、最後に1 + 2 = 3を実行します。

しかし、このプログラムが実行されると、153が出力されます。なぜ出力されるのか、最も近い手がかりはありません。

理由は誰にもわかりますか?

役に立ちましたか?

解決

同じコンソールに2つのプロセスが出力される理由。 &quot;フォーク&quot;は1回呼び出され、2回返されるunix / linuxコマンドです。戻り値の1つは、forkを呼び出した元のプロセスにあり、生成された子プロセスのPIDを返します。 2番目の戻り値は0になり、これはそれが子プロセスであることを示します。

プログラムの1つである子供は、最初に実行し、値として15を計算し、最後にコンソールに出力します。親プログラムは、wait(0)のために2番目に実行され、値3を生成します。

他のヒント

15 は子によって印刷され、 3 は親によって印刷されます。

Aは親、Bは子、重要な行は次のとおりです:

A: pid = fork(); // returns 0 for the child process
A: wait(0);
B: k = 5;
B: for(int i = 1; i <= k; i++) som += i; // som = 15
B: printf("%d", som); // prints 15, B finishes, goes back to A
A: for(int i = 1; i <= k; i++) som += i; // som = 3
A: printf("%d", som); // prints 3

値の間に改行が印刷されていないため、親の回答が子の回答の直後に表示されます。

Jaredは値の原因について正しい。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top