Isso ocorre porque o manipulador de sinal é válido para pai e filho após a chamada fork ().
Como o filho bifurcado é executado no mesmo grupo de processos que o pai, ambos os processos recebem o sinal.
Você pode gostar de usar este comando printf ():
printf("interrupt has been invoked in pid %d\n", (int)getpid());
O driver tty tem um grupo de processo tty configurado e se você digitar ^ C e ^ C é configurado como o caractere TTY INTR, então o driver tty envia SIGINT para todos os processos que estão no mesmo grupo de processo que o tty motorista.