Dubbio urgente con cattura di segnali

di il
1 risposte

Dubbio urgente con cattura di segnali

Ciao a tutti, ho un dubbio sull'interpretazione di un codice relativo ai segnali.
in particolare cattura dei segnali.

io ho un processo padre che mediante un ciclo for crea 5 processi figli con la fork.
questi figli vanno a eseguire una certa funzione (proc) al termine della quale terminano con exit(0)

 for(i=0;i<5;i++)
        if (fork()==0)
           { proc(i); exit(0);}


il padre attende la loro terminazione e richiama la funzione rimuovi che serve per rimuovere semafori e memoria condivisa
for(i=0;i<5;i++)
        { pid=wait(0);
          printf("Terminato processo %d\n",pid);
        }
  rimuovi(0);

ho contemplato la possibilità che se l'utente digita CTRL + C mentre si sta ancora lavorando si vada a richiamare subito la funzione rimuovi
 signal (SIGINT, rimuovi);

dove la rimuovi è così strutturata
void rimuovi (int z)
     { 
 if (semctl(semid,0,IPC_RMID)==-1) perror("Rimozione semaforo");
 else { printf("Rimozione semaforo OK\n"); }
 if (shmctl(shmid,IPC_RMID,0)==-1) perror("Rimozione shm"); 
 else { printf("Rimozione memoria OK\n"); }

 exit(0);
      }

ORA IL DUBBIO
se tutto avviene normalmente i figli terminano con la exit(0) dopo proc(i) e il padre va a eseguire la rimuovi e lui stesso termina con la exit(0) presente dentro la rimuovi().

ma se si lavora ancora e io faccio CTRL +C si va a richiamare rimuovi e con la exit(0) che succede?
- termina solo il padre e i figli diventano zombie
- terminano tutti
o che altro???

grazie a tutti

1 Risposte

  • Re: Dubbio urgente con cattura di segnali

    Se termina il padre prima che i figli terminano, i figli rimangono orfani del padre e vengono adottati dal processo init che per definizione è il padre di tutti i processi.
    Riguardo agli zombie, mi pare che non ti siano molto chiari:
    uno zombie è un processo figlio terminato, ma la sua terminazione non è stata ancora rilevata dal padre (con la wait) o il padre non è ancora terminato, fino ad allora il processo zombie mantiene allocate le risorse.

    Ciao
Devi accedere o registrarti per scrivere nel forum
1 risposte