1. 信号
信号是软中断,用于一个或多个进程之间传递异步信号,如:按下某些终端键,硬件中断等。

2常见信号
SIGHUP 从终端上发出的结束信号
SIGINT 来自键盘的中断信号
SIGQUIT 来自键盘的退出信号
SIGFPE 浮点异常信号

3对信号的处理
<1> 忽略该信号
<2> 执行系统默认动作
<3> 捕捉信号

4发送与捕捉信号
kill()和raise()

---------------kill------------------

头文件
#include<sys/types.h>
#include<signal.h>

函数原型
int kill(pid_t pid,int sig);

函数说明
kill()可以用来送参数sig指定的信号给参数pid指定的进程。参数pid有几种情况:
  pid>0 将信号传给进程识别码为pid 的进程。
  pid=0 将信号传给和目前进程相同进程组的所有进程
  pid=-1 将信号广播传送给系统内所有的进程
  pid<0 将信号传给进程组识别码为pid绝对值的所有进程
sig 信号种类
返回值 执行成功则返回0,如果有错误则返回-1。

---------------raise------------------
头文件
#include<signal.h>
#include<sys/types.h>
函数原型
int raise(int sig)
函数说明
sig 系统信号
向正在执行的程序发送一个信号

5代码
kill父进程向子进程发送信号,
 
  
  1. #include<sys/types.h> 
  2. #include<sys/stat.h> 
  3. #include<signal.h> 
  4. #include<unistd.h> 
  5. #include<stdio.h> 
  6. #include<stdlib.h> 
  7.  
  8. int main() 
  9.         pid_t pid; 
  10.     pid=fork(); 
  11.     if(pid<0) 
  12.         { 
  13.             perror("fork() error\n"); 
  14.         } 
  15.  
  16.    if(pid==0)/*子进程*/ 
  17.   { 
  18.      printf("son process wait for signal!\n"); 
  19.      pause();/*使调用进程挂起,直至捕捉到一个信号*/ 
  20.  
  21.   }else/*父进程*/ 
  22.   { 
  23.     sleep(3); 
  24.     kill(pid,SIGKILL);/*向子进程发送SIGKILL信号*/ 
  25.     printf("parent process send signal!\n"); 
  26.     waitpid(pid,NULL,0);/*等待pid退出*/ 
  27.    printf("son process exit!\n"); 
  28.    exit(0); 
  29.   } 


6输出
son process wait for signal! parent process send signal! son process exit!