我们需要告诉以下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);
}
Run Code Online (Sandbox Code Playgroud)
我的第一个期望是3.当进行fork调用时,将复制进程的内存,并且两个程序都会运行.然后子进程执行,但k仍然等于2.所以最后,它执行1 + 2 = 3;
但是当这个程序执行时,它输出153.我没有得到最接近的线索,为什么输出它.
有谁能说出原因?
Jar*_*Par 15
原因是您有2个进程打印到同一个控制台."fork"是一个unix/linux命令,调用一次并返回两次.其中一个返回将在原始进程中调用fork并返回生成的子进程的PID.第二个返回值为0,这表示它是子进程.
其中一个程序,我相信的孩子,首先执行并计算15作为值并最后打印到控制台.由于wait(0),父程序执行第二个并产生值3.