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

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

下面的代码forkparentchild..

于 2013-05-03T12:10:10.240 回答