我不完全理解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? 感谢您的帮助:)
答案 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()
。