我试图理解 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/