【发布时间】:2016-02-29 16:44:23
【问题描述】:
关于 SO 上的 fork() 有多个问题,我已经阅读了很长时间。我正在尝试解决这样的技巧问题:
Consider the code fragment:
if(fork==0)
{a = a+5; printf("%d, %d \n", a, &a);}
else{a = a-5; printf("%d, %d \n", a, &a);}
Let u, v be the values printed by the parent process and x, y be the values printed by the child process. Which of the following is true:
a) u = x+10 and v = y
b) u = x+10 and v != y
c) u+10 = x and v = y
d) u+10 = x and v != y
显然,父进程和子进程的地址不同,所以答案必须是 b 或 d。我什至无法解释u 可以是x+10 或u+10 可以是x。这究竟是如何工作的? fork() 创建两个完全相同的进程副本。如果fork() 返回零,则表示父进程正在if 块中执行。否则,子进程在else 块中执行语句,然后父进程在if 块中执行?我的思路对吗?
【问题讨论】:
标签: operating-system fork system-calls