1
   #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 的初学者,因此在首先回答问题之前,我想确保我的理解是正确的。line# (1) 到第 (2) 行和第 (4) 行到第 5 行构成父进程和第 (6) 行) 到第 (7) 行构成子进程,fork() 之上的任何内容,即从第 (1) 行到第 (2) 行的任何内容都被复制到子进程的地址空间。我对上述观点是否正确?那么为什么第(2)行没有打印两次,一个在子进程中,另一个在父进程中。?

4

2 回答 2

0

子进程继承父进程的上下文并在 fork() 之后继续执行。通常,exec() 在 child 中的 follow() 之后调用,exec() 覆盖 parent 的上下文,并让 child 全新运行。

于 2013-03-27T11:56:19.520 回答
0

父母和孩子都从调用 到 之后继续fork()。孩子不再从main().

(如果您希望子进程从头开始,则应在子进程中立即使用fork()后续。)exec()

于 2013-03-27T11:51:00.593 回答