質問
次の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は値の原因について正しい。
所属していません StackOverflow