fork()和更改局部变量?

Ran*_*ath 2 c fork process

我试图理解fork()概念,这是我无法理解的一件事.

在下面的代码中 - 为什么父进程仍然打印i = 0,即使子进程将其更改为5?

等待(NULL)块父进程,直到孩子完成第一次.

int main(int argc, char *argv[]) {
  int i = 0;
  if (fork() == 0) {
    i = 5;
  } else {
    wait(NULL);
    printf("i = %d\n", i);
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么我的假设不正确吗?

che*_*ner 5

流程之间不共享变量.在调用之后fork,有两个完全独立的进程.fork在子节点中返回0,其中局部变量设置为5.在父节点中,fork返回子节点的进程ID,值不变i; 在fork调用之前它仍然具有值0 .这与您分别运行两个程序的行为相同:

int main(int args, char *argv[]) {
    int i=0;
    printf("i = %d\n", i);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

int main(int argc, char *argv[]) {
  int i = 0;
  i = 5;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)