devo risolvere un esercizio assegnatomi:
Il segnale SIGTERM viene catturato due volte da un processo figlio. La prima volta viene invocata
una routine di servizio, la seconda viene ripristinata l'azione di default (terminazione).
ecco qui il codice ma purtroppo non mi funziona.dove sbaglio?
codice:#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> #include <signal.h> void catturaTERM(int sig){ //Funzione per catturare il segnale printf("Ho catturato il segnale %d\n", sig); } void ripristinaTERM(int sig){ struct sigaction action; action.sa_handler=SIG_DFL; printf("Ho ripristinato il comportamento di default"); } int main () { pid_t pid; struct sigaction action; struct sigaction action_1; int i,childstatus; action.sa_handler=catturaTERM; //setto la routine di servizio action_1.sa_handler=ripristinaTERM; pid=fork(); if(pid<0){ perror("Creazione fork fallita!\n"); exit(-1); } else if(pid==0){ for(i=0;i<2;i++){ if(i=0){ sigaction(SIGTERM,&action,0); } else { sigaction(SIGTERM,&action_1,0); } } } else{ for(i=0;i<2;i++){ if(i=0){ printf("Invio il segnale la prima volta\n"); kill(pid,SIGTERM); } else { printf("Invio il segnale la seconda volta\n"); kill(pid,SIGTERM); } } pid=wait(&childstatus); if(WIFEXITED(childstatus)) printf("Il processo figlio ha finito di eseguire correttamente!\n"); else printf("Il processo figlio ha terminato in modo anomalo!\n"); } }

