Pregunta

mientras estoy estudiando el sistema operativo supuesto ni de que entiende por qué la salida del código de abajo como esto

el código:

#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;
}

Salida:

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

si el valor en el niño se convirtió en el 20 por qué después de regresar de valor menor a 5 =

¿Fue útil?

Solución

Debido fork() crea un nuevo proceso, con su propio espacio de direcciones. Este espacio de direcciones está llena de una copia de los contenidos del espacio de direcciones original. Por lo tanto, los cambios realizados en un solo proceso no afecta a la otra.

En otras palabras, se debe a procesos no comparten la memoria (a menos que fuerce de forma explícita a la mmap() y así sucesivamente).

Otros consejos

Debido a que la memoria del proceso padre se copia en el proceso hijo y más cambios en la memoria del proceso hijo no afectan a la matriz de. tenedor trampas son interesantes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top