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の初心者なので、私の理解が正しいことを確認したいと思います。行番号(1)から行(2)および行(4)から行5は、親プロセスと行(6)を構成します。 )to line(7)は子プロセスを構成し、fork()より上のもの、つまりline(1)からline(2)まではとにかく子のアドレス空間にコピーされます。それでは、なぜ行番号(2)が2回印刷されないのですか?1つは子プロセスで、もう1つは親プロセスで印刷されます。

4

2 に答える 2

0

親と子の両方が、への呼び出しの直後から続行しfork()ます。子はの先頭から再開しませんmain()

(子プロセスを最初から開始する場合は、子でfork()すぐに続けて使用する必要があります。)exec()

于 2013-03-27T11:51:00.593 に答える
0

子プロセスは親のコンテキストを継承し、fork()の後も実行を続けます。通常、exec()は子のfolk()の後に呼び出され、exec()は親のコンテキストを上書きし、子にまったく新しいものを実行させます。

于 2013-03-27T11:56:19.520 に答える