#include<stdio.h>---->(1)
int main()
{
int i;
int j,K;
j = 200;
K = 300;
printf("Before forking: j = %d, K = %d\n ", j, K);---->(2)
i = fork();---->(3) /* Calling fork() */
if (i > 0) { /* Parent Process */ ----->(4)
sleep(10);/* Delay the parent */
printf("After forking, parent: j = %d, K = %d\n", j, K);
} ----->(5)
else {----->(6) /* Child process */
j++;
K++;
printf("After forking, child: j = %d, K = %d\n", j, K);
}---->(7)
o/p of the above pgm is
Before forking: j = 200, K = 300
After forking, child: j = 201, K = 301
After forking, parent: j = 200, K = 300.
由于我是IPC的初学者,所以在首先回答这个问题之前,我想确保我的理解是正确的。排行#(1)到第(2)行&amp;第(4)行到第5行构成父进程&amp;第(7)行到第(7)行构成了子进程,fork()之上的任何东西,即从第(1)行到第(2)行的任何东西都被复制到了child的地址空间。我对上述点有什么看法?那么为什么第#(2)行不能打印两次,一个在子进程中,另一个在父进程中。?
答案 0 :(得分:0)
父母和孩子都在呼叫fork()
后继续。孩子不会在main()
的顶部重新开始。
(如果您希望子进程从头开始,则应使用fork()
,然后立即使用exec()
。{/ p>
答案 1 :(得分:0)
子进程继承父进程的上下文,并在fork()之后继续执行。通常,exec()在child()中的folk()之后调用,exec()覆盖父级的上下文,让子项运行全新。