2

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

1 回答 1

3

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

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

父母所做的修改对孩子来说是不可见的,反之亦然,除非专门设置了一些东西(例如通过共享内存段)。

于 2012-05-14T15:40:32.907 回答