c - fork() 和改变局部变量?

标签 c process fork

我试图理解 fork() 概念,但有一件事我似乎无法理解。

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

wait(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;
}

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

最佳答案

进程之间不共享变量。在调用fork 之后,有两个完全独立的进程。 fork在child中返回0,这里局部变量设置为5。在parent中,fork返回child的进程ID,的值i 没有改变;在调用 fork 之前它的值仍然为 0。这与您让两个程序分别运行时的行为相同:

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

int main(int argc, char *argv[]) {
  int i = 0;
  i = 5;
  return 0;
}

关于c - fork() 和改变局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37347140/

相关文章:

c - 通过 EOF 中断 while 循环

c++ - C/C++ : Flush output before abnormal termination

c++ - 写入子进程的标准输入

黑莓 - 运行后台应用程序

perl - 想要在Perl脚本中执行Perl脚本

c - fork() - 父进程和子进程访问多个文件

C初学者不终止程序

编译.C 文件 : Undefined symbols for architecture x86_64

c# - 杀死 Windows 资源管理器有问题吗?

django - 你如何使用 git 在 django 上管理你的 fork 可重用应用程序