我们需要告诉以下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.我没有得到最接近的线索,为什么输出它。
有人可以说出原因吗?
答案 0 :(得分:15)
原因是您有2个进程打印到同一个控制台。 “fork”是一个unix / linux命令,调用一次并返回两次。其中一个返回将在原始进程中调用fork并返回生成的子进程的PID。第二个返回值为0,这表示它是子进程。
其中一个程序,我相信的孩子,首先执行并计算15作为值并最后将其打印到控制台。由于wait(0),父程序执行第二个并产生值3.
答案 1 :(得分:4)
15
由儿童打印,3
由父母打印。
答案 2 :(得分:2)
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
答案 3 :(得分:0)
在值之间没有打印换行符,所以父母的答案就会在孩子回答后出现。
Jared对价值观的原因是正确的。