这个程序中的孩子将如何运行?

时间:2016-04-13 08:20:27

标签: c linux operating-system fork wait

我不完全理解fork函数,我不知道父和子如何从fork()函数处理contineo或跳过这一行并转到下一行。例如:

int value = 0;
if (fork()!=0)
{
 wait(&value);
 value = WEXITSTATUS(value);
 value++;
}
printf("%d\n",value);
value+=2;
exit(value);

当我们实现fork函数时,父亲去了wait()函数,但我不明白从孩子从if()开始运行的地方或者他逃脱它并立即去找printf? 感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

整个程序是重复的,父亲和儿子都从fork()开始 父进入if,因为它的fork返回值为非null,并且在转到

之后
printf("%d\n",value);
value+=2;
exit(value);

而儿子只是去了这一行,因为pid是零。

由于行value += 2,儿子退出2。

父亲等待该值(即值= 2),增加它(值= 3),然后加2(值= 5)。

答案 1 :(得分:0)

fork()基本上makes a copy调用它的过程。

这意味着该进程在调用fork()时的运行时状态,包括当前指令指针。父进程和子进程之间的主要区别在于修改了旧进程的新副本,以便fork()的返回值将返回0,而对于旧进程,它返回PID。 / p>

除此之外,孩子将与父母处于相同的状态,并从父母的同一点继续执行,即呼叫fork()