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