信号的基本概念
1、中断:中止(注意不是终止)当前正在执行的任务,转而执行其它任务(可能返回也可能不返回),中断分为硬件中断(硬件设备产生的中断)和软件中断(其它程序产生的中断)。
2、信号:是一种软件中断,提供了一种异步执行任务的机制。
3、常见的信号
SIGINT(2) Ctrl+c 产生的信号
SIGQUIT(3) Ctrl+\ 产生的信号
SIGABRT(6) 调用abort函数,产生此信号
SIGFPE(8) 浮点数例外,除以0、浮点溢出等
SIGKILL(9) 不能被捕获或忽略,常用于杀死进程
SIGSEGV(11) 段错误信号,非法访问内存产生的信号
SIGTSTP(20) Ctrl+z 生产的信号
SIGCHLD(17) 子进程状态改变信号
注意:在终端中执行 kill -l 可以显示出所有信号
4、不可靠信号
建立在早期机制上的信号被称为不可靠信号,SIGHUP(1)~SIGSYS(31)。
不支持排队可能会丢失,同一个信号产生多次,进程可能只接收到一次。
5、可靠信号
采用新的机制产生的信号,SIGRTMIN(34)~SIGRTMAX(64).
支持排队,不会丢失。
6、信号的来源
硬件产生:除0,非法内存访问。
这些异常是硬件(驱动)检查到,并通知内核,然后内核再向引发这些异常的进程发送相应信号。
软件产生:通过kill/raise/alarm/setitmer/sigqueue函数产生。
7、信号的处理
1、忽略
2、终止进程
3、终止进程并产生core文件
4、捕获信号并处理。