Ecco un codice:variabili dopo forchetta
int i=0;
pid_t pid;
puts("Hello, World!");
puts("");
pid = fork();
if(pid)
i=42;
printf("%p\n", &i);
printf("%d\n", i);
puts("");
E uscita
Hello, World!
0x7fffc2490278
42
0x7fffc2490278
0
stampa Programma Ciao, mondo! una volta, quindi, il processo figlio non è stato avviato dall'inizio e non è stato ridefinito le variabili. Gli indirizzi delle variabili sono gli stessi. Quindi sono uguali. Ma cambio il valore di I nel processo genitore che viene eseguito per primo, non è cambiato per il processo figlio. Perché?
Uh, non hai cambiato "i" fino a * dopo * la forcella(). Potresti vedere il display in qualsiasi ordine: genitore prima o genitore dopo figlio. Ma * solo * il genitore mostrerà "42"; il bambino sarà sempre "0". – paulsm4
questa riga, dopo la chiamata al fork(): 'if (pid)' non è corretta. fork() restituisce -1 quando si verifica un errore (e si verificano occasionalmente). Quindi il codice agirà come se fosse un genitore di successo quando il fork() in realtà fallisce. Esistono diverse chiamate di funzioni di sistema in cui il codice di ritorno deve sempre essere controllato per assicurare che l'operazione abbia avuto esito positivo. fork() è una di quelle funzioni di sistema. La linea sarebbe molto meglio come: 'if (pid> 0)' Ancora meglio sarebbe anche controllare se pid <0 e gestire l'errore – user3629249