Linux 信号机制详解
信号
Linux信号是一种“软中断”处理机制,它提供了一种处理异步事件的方法;信号也可用于进程间通信(一个进程可以向另一个进程发送信号)。
信号的分类
1、 按可靠性:分为可靠信号及不可靠信号
不可靠信号是指信号可能会丢失,即在信号处理函数执行期间,如果该信号产生多次则只保留一次(调用一次信号处理函数),其余的都会被丢失。信号值小于SIGRTMIN的信号都属于不可靠信号。
可靠信号支持排队,不会丢失;值大于等于SIGRTMIN的信号都属于可靠信号。
注意:现在的linux版本中信号是否可靠跟signal或sigaction函数没关系,在一些比较老的文档中可能会提到信号是否可以跟注册函数相关。
(文档末尾提供信号可靠性测试函数)
2、 按实时性:分为实时信号与非实时信号
实时信号即是可靠信号,它支持排队,不会丢失;非实时信号即是不可靠信号。
信号的响应方式
进程支持三种方式响应信号:A、忽略信号,即对信号不做任合处理,但SIGKILL及SIGSTOP信号不能被忽略(相信大家应该都知道为什么不能被忽略了)。B、按缺省方式处理,linux对每种信号都规定了缺省动作。C、捕捉信号,这也是我们最常用的方式,注册一个信号处理函数,当信号到达时会调用注册的处理函数。
查看系统中支持的信号
使用Kill –l 命令可以显示出当前系统支持的所有信号。我的系统中支持如下信号:
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5)SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9)SIGKILL 10) SIGUSR1 11) SIGSEGV 12)SIGUSR2
13) SIGPIPE 14)SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18)SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22)SIGTTOU 23)