信号的基本概念
中断
- 中断是系统对于异步事件的响应()
主要构成部分
- 中断源
中断信号
现场信息
- 中断向量表
- 中断处理程序
异步事件的响应:进程执行代码的过程中可以随时被打断,然后去执行异常处理程序
中断流程:中断源发出中断信号,CPU判断中断是否屏蔽屏蔽、保护现场 ,cpu根据异常/中断向量表,执行中断处理程序, cpu恢复现场,继续原来的任务。
- 其他概念:
- 中断向量表保存了中断处理程序的入口地址。
- 中断个数固定,操作系统启动时初始化中断向量表。
- 中断有优先级(有人敲门,有人打电话,有优先级)
- 中断可以屏蔽(张三可以屏蔽电话)。
- 中断分类
- 硬件中断(外部中断)
外部中断是指由外部设备通过硬件请求的方式产生的中断,也称为硬件中断 - 软件中断(内部中断)
内部中断是由CPU运行程序错误(取指异常)或执行内部程序调用引起的一种中断,也称为软件中断。 - x86平台INT指令 ARM平台SWI指令–软中断指令
- 硬件中断(外部中断)
信号
- 信号是UNIX系统为响应某些状况而产生的事件,进程在接收到信号时会采取相应的行动。–为了正常完成任务设置的信号
- 信号是因为某些错误条件而产生的,比如内存段冲突、浮点处理器错误或者非法指令等–程序出错产生的信号
- 信号是在软件层次上对中断的一种模拟,所以通常把它称为是软中断
信号VS中断
信号与中断的相似点:
(1)采用了相同的异步通信方式;
(2)当检测出有信号或中断请求时,都暂停正在执行的程序而转去执行相应的处理程序;
(3)都在处理完毕后返回到原来的断点;
(4)对信号或中断都可进行屏蔽。
信号与中断的区别:
(1)中断有优先级,而信号没有优先级,所有的信号都是平等的;
(2)信号处理程序是在用户态下运行的,而中断处理程序是在内核态下运行;
(3)中断响应是及时的,而信号响应通常都有较大的时间延迟
信号名称及常用信号
信号名称 | 描述 |
---|---|
SIGABRT | 进程停止运行 6 |
SIGALRM | 警告钟 |
SIGFPE | 算述运算例外 |
SIGHUP | 系统挂断 |
SIGILL | 非法指令 |
SIGINT | 终端中断 2 |
SIGKILL | 停止进程(此信号不能被忽略或捕获) |
SIGPIPE | 向没有读者的管道写入数据 |
SIGSEGV | 无效内存段访问 |
SIGQUIT | 终端退出 3 |
SIGTERM | 终止 |
SIGUSR1 | 用户定义信号1 |
SIGUSR2 | 用户定义信号2 |
SIGCHLD | 子进程已经停止或退出 |
SIGCONT | 如果被停止则继续执行 |
SIGSTOP | 停止执行 |
SIGTSTP | 终端停止信号 |
SIGTOUT | 后台进程请求进行写操作 |
SIGTTIN | 后台进程请求进行读操作 |
* kill –l
可以查看linux内核支持的信号
* man 7 signal
查看信号的默认动作、信号的含义
进程对信号的三种相应
忽略信号
不采取任何操作、有两个信号不能被忽略:SIGKILL(9号信号)和SIGSTOP。思考1:为什么进程不能忽略SIGKILL、SIGSTOP信号。(如果应用程序可以忽略这2个信号,系统管理无法杀死、暂停进程,无法对系统进行管理。)。SIGKILL(9号信号)和SIGSTOP信号是不能被捕获的。
捕获并处理信号
内核中断正在执行的代码,转去执行先前注册过的处理程序。- 执行默认操作
默认操作通常是终止进程,这取决于被发送的信号。
信号的默认操作:通过 man 7 signal 进程查看