基本概念:
1、中断
当程序接收到消息后中止了当前正在执行的程序,转而执行其他的任务,等其他任务执行完成后可能再返回继续执行,这种执行模式称为中断执行
分为硬件中断和软件中断
硬件中断由外设硬件产生的中断,例如键盘、鼠标都可以产生,可以屏蔽
软件中断是程序执行了中断指令后产生的中断
2、信号
信号是一种软件中断,是由操作系统发出的中断信号,被程序接收后执行相应的操作
3、常见的信号
kill -l 显示所有信号
SIGINT (2) Ctrl+c 终止
SIGQUIT(3) Ctrl+\ 终止+core(内存映像 内存崩溃)
SIGFPE(8) 除0\溢出 终止+core
SIGKILL(9) 用于杀死进程 终止
SIGSEGV(11) 非法访问内存 终止
4、不可靠信号和可靠信号
建立在早期的信号处理机制上的信号(1-31),称为不可靠信号
不支持排队机制,可能会丢失信号,如果同一个信号连续发送多次,进程可能只接受到了一次
建立在新的信号处理机制上的信号(34~64),称为可靠信号
支持排队机制,如果信号连续发送,也不会丢失
5、信号的来源
硬件异常:除0、非法访问内存、使用了未定义的指令、总线错误
软件异常:通过一些命令、函数产生信号
6、信号的处理
① 忽略
② 终止进程
③ 终止进程+产生core文件
④ 捕获并处理信号(在信号发出前,向内核注册一个信号处理函数,绑定该信号与信号处理函数,当信号发出后,会执行信号处理函数)
信号捕获和注册
typedef void (*sighandler_t)(int);
注意:信号处理函数的格式
参数int表示是导致执行该函数的信号的ID
sighandler_t signal(int signum, sighandler_t handler);
功能:向内核提出绑定一个信号处理函数
signum:信号编号
handler:信号处理函数函数名
还可以写成:
SIG_IGN 忽略处理
SIG_DFL 按默认方式处理
返回值:
返回绑定之前的信号处理函数指针,一般用于记录还原
注意:有个别操作系统通过signa