Linux信 处理
Linux下的信 处理相关概念与命令代码
-
-
-
- Linux信 处理
- 一、基本概念
- 二、信 捕获
- 三、进程休眠信
- 四、信 集和信 阻塞
- 五、附带数据信息的信 处理
- 六、定时器
-
-
一、基本概念
-
中断
程序接收到消息后中止当前正在执行的程序,转而执行其它任务,等其它任务执行完成后再返回,这种执行模式叫做中断
中断分为硬件中断和软件中断 -
信
是一种软件中断,由操作系统发出,程序接收后会执行相应的操作
-
常见的信
命令 查看所有信
符 | 含义 | 作用 |
---|---|---|
SIGINT(2) | Ctrl+c | 终止 |
SIGQUIT(3) | Ctrl+ | 终止+core |
SIGFPE(8) | 除零 | 终止+core |
SIGKILL(9) | 终止信 | 终止 不能捕获、忽略 |
SIGSEGV(11) | 非法访问内存 | 终止+core |
-
不可靠信 和可靠信
建立在早期的信 处理机制(1-31)的信 是不可靠信 ,意味着它不支持排队,可能会丢失,如果同一个信 连续产生多次,进程可能只相应一次,但是多个不同的信 ,会按照时间顺序从后往前相应。
建立在新的信 处理机制上(34-64)(ps:无32,33)的信 是可靠信 。支持排队,信 不会丢失。
-
硬件异常:除零、非法访问内存、未定义的指令、总线错误
软件异常:通过一些命令、函数产生的信 -
信 的处理方式
- 忽略
- 终止进程
- 终止进程并产生core文件(记录内存映像)
- 停止/挂起
- 继续
- 捕获并处理 (在信 发生前,先向内核注册一个函数,当信 来临时系统会自动执行该函数)
二、信 捕获
功能:说明信 处理函数的格式
功能:向内核注册一个信 处理函数
:信 编
:函数指针
也可以使用以下参数:
:忽略
:按默认方式处理
返回值:
之前的信 处理方式
注意:
1、SIGKILL(9)、SIGSTOP(19)信 不能被捕获和忽略处理
2、当信 处理完后可能会返回产生信 的代码继续运行,如果我们捕获并处理段错误、算术异常等信 可能会产生死循环,正确的处理段错误、算数异常信 应该是备份数据并直接结束程序
3、有些系统通过signal注册的信 处理函数只能执行一次,如果想要持续有效,可以在信 处理函数中再重新注册一次
4、子进程会继承父进程的信 处理方式,但是通过exec系列函数创建的子进程,会恢复默认的信 处理方式
信 的发送方式:
1、键盘
Ctrl+c
Ctrl+
Ctrl+z 暂停挂起 fg 继续
2、错误
除零
非法访问内存
总线错误
3、命令
kill -信 编 进程
功能:向指定的进程发送信
killall -信 编 进程名
可以给同名进程发送同一个信
4、函数
三、进程休眠信
四、信 集和信 阻塞
信 集:是一种数据类型,定义的变量可以存储多个信
128个字节,每一字节都固定代表了一种信
相关函数:
功能:清空信 集
功能:填满信 集
功能:向信 集set中添加信 signum
功能:从信 集set中删除信 signum
功能:测试信 集中是否存在信
返回值:
不存在
存在
信 非法
信 阻塞:
当程序执行到一些特殊操作时,不适合处理信 ,此时可以让内核先屏蔽信 ,等操作执行完成后再解除屏蔽重新发送信
当信 产生时,内核会在其维护的信 表中为对应的进程设置与该信 对应的标记,这个过程叫做递送
从信 产生到完成递送有个时间间隔,处于这个间隔的信 状态称为未决
信 屏蔽阻塞就是让被屏蔽的信 先处于未决状态、暂停递送,当屏蔽解除时在继续递送
功能:设置要屏蔽的信 、这些信 是存储在信 集里面
:信 屏蔽的方式
把set中的信 添加到要屏蔽的信 集里
从信 屏蔽集中删除中的信 解除
把set替换之前的信 屏蔽集
:准备好的信 集
:获取旧的信 屏蔽集
五、附带数据信息的信 处理
六、定时器
文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览113366 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!