Кто-нибудь может объяснить этот вывод (операционная система)? - PullRequest
1 голос
/ 19 ноября 2010

пока я изучал курс по операционной системе, я не понимал, почему вывод приведенного ниже кода выглядит следующим образом

код:

#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 

если значение в child стало 20, почему после возврата из дочернего значения = в 5

Ответы [ 2 ]

4 голосов
/ 19 ноября 2010

Поскольку fork() создает новый процесс с собственным адресным пространством.Это адресное пространство заполняется копией содержимого исходного адресного пространства.Таким образом, изменения, внесенные в одном процессе, не влияют на другой.

Другими словами, это происходит потому, что процессы не делят память (если вы явно не принудите их использовать mmap() и так далее).*

0 голосов
/ 19 ноября 2010

Поскольку память родительского процесса копируется в дочерний процесс, и дальнейшие изменения в памяти дочернего процесса не влияют на родительский процесс. Интересны вилки .

...