任何人都可以解释这个输出(操作系统)?

时间:2010-11-19 15:34:34

标签: c operating-system pid

当我正在学习操作系统课程时,我不明白为什么下面代码的输出会像这样

代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h> 

int main (int argc, const char * argv[]) {

    int value = 5;


    pid_t pid = fork();
    printf("pid = %d \n",pid);
    if (pid == 0){
        value+=15;      
        printf("Value ch :%d \n",value);
    }
    else {
        if (pid > 0) {
            wait(NULL);
            printf("Value pr :%d \n",value);
            exit(1);
        }

    }

    return 0;
}

输出:

run
[Switching to process 24752]
Running…
pid = 24756 
pid = 0 
Value ch :20 
Value pr :5 

如果孩子的价值变为20,为什么从孩子值= 5返回后

2 个答案:

答案 0 :(得分:4)

因为fork()创建了一个具有自己地址空间的新进程。该地址空间填充了原始地址空间的内容副本。因此,在一个过程中所做的更改不会影响另一个过程。

换句话说,这是因为进程不共享内存(除非你明确强制它们使用mmap()等等。)

答案 1 :(得分:0)

因为父进程内存被复制到子进程,并且子进程内存中的进一步更改不会影响父进程。 fork pitfalls很有意思。