有人可以解释为什么以下程序的输出是1而不是2?
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main(int argc, char *argv[])
{
int x = 1;
int *y = &x;
pid_t pid = fork();
if (pid == 0) {
*y = 2;
exit(0);
} else {
wait(NULL);
printf("father: %d\n", x);
}
return 1;
}
答案 0 :(得分:3)
fork
不创建线程,它会创建一个全新的进程。
孩子的地址空间是父母的地址空间,他们不共享。
父级所做的修改在子级中是不可见的,反之亦然,除非专门设置了某些内容(例如通过共享内存段)。