Salve a tutti, mi stavo esercitando sulle memorie condivise ed ho scritto questo programma:

codice:
#include <stdio.h>
#include <stdlib.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/wait.h>

int main(void){
    key_t key= ftok(".",'G');
    int shm_id, *shm_ptr;
    int pid;
    int status;
    int num;
    if((shm_id= shmget(key, sizeof(int), IPC_CREAT|IPC_EXCL|0664)) == -1){
        printf("Segmento già esistente. Apertura come client...\n");
        if((shm_id= shmget(key, sizeof(int), 0664)) == -1){
            perror("shget");
            return -1;    
        }
    }
    else printf("Creazione segmento condiviso..\n");

    if((shm_ptr=shmat(shm_id, 0, 0)) == (void*) -1){
        perror("shmat");
        return -1;
    }

    *shm_ptr=5;
    num=6;
    
    pid=fork();
    if(pid==-1) printf("Fork fallita");
    else if (pid>0) {
        printf("Sono il padre, il mio pid è %d, quello di mio figlio è %d, nella shm leggo %d e nel num %d.\n", getpid(),pid,*shm_ptr,num);
        wait(&status);
        if(WIFEXITED(&status)) printf("Figlio terminato normalmente con stato %d.\n", WEXITSTATUS(&status));
        else printf("Figlio terminato in modo anomalo.\n");
        if(WIFSIGNALED(&status)) printf("Figlio terminato in modo anomalo con stato %d.\n", WTERMSIG(&status));
        printf("Sono di nuovo il padre, ora in shm leggo %d e in num %d.\n",*shm_ptr,num);
        printf("Distruggo la memoria condivisa..\n");
        shmctl(shm_id, IPC_RMID,0);
        
    }
    else{
        printf("Sono il figlio, il mio pid è %d, quello di mio padre è %d, nella shm leggo %d e nel num %d.\n", getpid(),getppid(),*shm_ptr,num);
        printf("Modifico il contenuto della shm con 2 e di num con 3.\n");
        *shm_ptr=2;
        num=3;
        exit (0) ;
    }
    
    return 0;

}
L'unico problema con questo codice è che, ogni volta che eseguo il programma, il figlio termina sempre in uno stato anomalo con codice diverso (ad esempio 12,60,108,28,124, ecc.).
Qualcuno sa darmi una spiegazione?