在子进程中操纵父亲的var

时间:2012-05-14 15:36:49

标签: c process

有人可以解释为什么以下程序的输出是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;
}

1 个答案:

答案 0 :(得分:3)

fork不创建线程,它会创建一个全新的进程。

孩子的地址空间是父母的地址空间,他们不共享。

父级所做的修改在子级中是不可见的,反之亦然,除非专门设置了某些内容(例如通过共享内存段)。