信号
信号是在软件层次上对中断机制的一种模拟,在原理上,可以认为进程收到一个信号与处理器收到一个中断请求是一样的。信号是一种异步通信方式,可以在任何时候发送给某一进程,而无须知道该进程的状态。
信号分类
可靠信号:也称为实时信号,信号值位于SIGRTMIN及SIGRTMAX之间,支持排队,即可重复在进程中注册,可以存在多个sigqueue结构,不会丢失。
不可靠信号:也称为非实时信号,信号值小于SIGRTMIN,不支持排队,即不可重复在进程中注册,最多只有一个sigqueue结构,当信号发生多次时,只会传送一次,导致信号丢失。
信号产生(发送)
信号事件有两个来源:
1)硬件来源,用户通过输入cltr+c(产生中断信号sigint),或者是终端驱动程序分配给信号控制字符的其他任何键来请求内核产生信号;当进程执行出错时,内核会给进程发送一个信号,例如非法段存取(内存访问违规)、浮点数溢出等。
2)软件来源,例如使用系统调用或者命令发出信号。一个进程可以通过系统调用kill给另一个进程发送信号,一个进程可以通过信号和另外一个进程进行通信。
发送信号的主要函数有:kill()、raise()、 sigqueue()、alarm()、setitimer()以及abort()。