¿alguien puede explicar esta salida (sistema operativo)?
-
26-09-2019 - |
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 =
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.