描述 
使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上发出的中断信号(即按ctrl+c键),当父进程接收到这两个软中断的某一个后,父进程用系统调用kill()向两个子进程分别发出整数值为16和17软中断信号,子进程获得对应软中断信号,然后分别输出下列信息后终止: 
Child process 1 is killed by parent !! 
Child process 2 is killed by parent !! 
父进程调用wait()函数等待两个子进程终止后,输入以下信息,结束进程执行: 
Parent process is killed!!
流程图: 
实现 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 #include  <stdio.h>  #include  <stdlib.h>  #include  <signal.h>  #include  <unistd.h>  #include  <sys/types.h>  #include  <sys/wait.h>  int  wait_flag = 1 ;void  stop1 ()  ;void  stop2 ()  ;int  main (int  argc,char ** argv)  {    pid_t  pid1,pid2;     signal(2 ,stop1);        while ((pid1 = fork()) == -1 );     if (pid1 > 0 )           {         while ((pid2 = fork()) == -1 );            if (pid2 > 0 )         {             sleep(5 );                    kill(pid1,16 );               wait(0 );             kill(pid2,17 );              wait(0 );             printf ("\nParent process is killed!\n" );             exit (0 );         }         else          {             signal(17 ,stop2);                while (wait_flag)                 ;             printf ("\nChild process 2 is killed by parent!\n" );             exit (0 );         }     }     else      {         signal(16 ,stop2);         while (wait_flag)             ;         printf ("\nChild process 1 is killed by parent!\n" );         exit (0 );        } } void  stop1 ()  {    printf ("\nParent process catches the interruption signal!\n" ); } void  stop2 ()  {    wait_flag = 0 ;     printf ("\nChild process catches the interruption signal!\n" ); } 
 
结果 
5s内没有按终止键: 
5s内按下ctrl+c: 
附 
系统调用signal(sig,function):捕捉中断信号sig后执行function规定的操作。 
参数定义:int sig,void* func() 
sig共有19个值: