0
    #include<stdio.h>
    #include <stdlib.h>
    int main()
    {
            int i=1;
            pid_t j=fork();
            i=4;
            if(j==0)
            {
                    printf("%d\n",i);
            }
            i=5;    // will this line runs in both parent and child?

    }

子プロセスの fork() の後1、親プロセスがそれをどのように変更しても、結果は 4 であると思いますが、なぜ 1 ではないのですか?

4

2 に答える 2

2

i子の値を変更します。後のすべてのコードfork()は、両方のプロセスで実行されます。

pid_t j=fork();
i=4;              // <- this runs in both parent and child
if(j==0) {
   ...            // <- this runs only in child because of the if
}
i=5;              // <- this runs in both parent and child

子での実行は fork の後の行から開始され、通常どおり実行されます。「子」であることから、子の実行に特別なことはまったくありません。通常のコードフローは、親と同じように発生します。

子で何が起こっているのか、親で何が起こっているのかを明確に区別したい場合は、コードで明示的にしてください。

pid_t j = fork();
if (j < 0) {
  // fork failed, no child created at all
  // handle error
} else if (j == 0) {
  /* In child process */
  ...
} else {
  /* In parent process */
  ...
}
于 2013-05-03T12:08:25.640 に答える
1

以下のコードは、と..forkの両方で実行されます。parentchild

于 2013-05-03T12:10:10.240 に答える