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