Nel modo sopra non stampa "sto terminando la mia esecuzione".
Sono riuscito a risolvere cosi:
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
void handelr(int sig){
sig=sig;
fprintf(stderr,"sto terminando la mia esecuzione\n");
fflush(stdout);
_exit(0);
}
int main(){
pid_t pid;
if ((pid=fork())==-1){
fprintf(stderr,"errore fork() \n");
exit(0);
}
if (pid == 0){
if (signal(SIGUSR1,handelr) == SIG_ERR){
fprintf(stderr,"errore signal() \n");
exit(0);
}
for (;;){
printf("sono il figlio e sto ciclando all’infinito!\n");
fflush(stdout);
printf("questo messaggio non dovrebbe mai essere visualizzato!\n");
fflush(stdout);
while(1);
}
}else{
/* il padre invia un segnale SIGUSR1 al figlio */
sleep(3);
kill(pid, SIGUSR1);
printf("\nsono il padre!\n");
exit(0);
}
exit(0);
}
in questo modo stampa anche "sto terminando la mia esecuzione". In pratica ho aggiunto solo un ciclo infinito ( while(1) ).
scusate se rispondo tardi ma sono stato occupato questa settimana.
Grazie a tutti per l'aiuto comunque