[Linux系统编程]进程间通信---信号

一.信号的概念

信号是信息的载体,Linux/UNIX 环境下,古老、经典的通信方式,现下依然是主要的通信手段。
Unix早期版本就提供了信号机制,但不可靠,信号可能丢失。Berkeley和AT&T都对信号模型做了更改,增加了可靠信号机制。但彼此不兼容。POSIX.1对可靠信号例程进行了标准化。

A给B发送信号,B收到信号前在执行自己的代码,收到信号后,不管执行到程序的什么位置,都要暂停运行,去处理信号,处理完之后再继续。与中断类似,但信号是软件层面上实现的中断,早期常被称为“软中断”。

二.信号的特质:

1.简单,不能携带大量信息,必须满足某条件才可发送。
2.信号是通过软件层面上的实现,其实现手段导致信号有很强的延时性。
3.每个进程收到的所有信号,都是由内核负责发送的,内核处理。

三 .信号相关的事件和状态

产生信号:

按键产生:如Ctrltc、Ctrltz、Ctrl+\v1.
系统调用产生:如kill、raise、aborte2
软件条件产生:如定时器alarm
硬件异常产生:如:非法访问内存(段错误)、除0(浮点数例外)、内存对齐出错(总线错误)
命令产生:如:kil命令

递达:信号递送并且到达进程
未决:产生和递达之间的状态。主要由于“阻塞(屏蔽)”导致该状态。下文讲到的未决信号集是导致该状态的主要原因,会使某个信号处于被屏蔽状态,从而无法递达

递达后,信号的处理方式:

1.执行默认动作。
2.忽略(丢弃)
3.捕捉(调用户处理函数)

进程控制块PCB,除了包含进程Pid,进程状态,进程工作目录,用户 id,组id,
文件描述符表等,还应该包含了信号相关的信息 : 主要指阻塞信号集未决信号集

四.阻塞信号集和未决信号集

阻塞信号集,也称信号屏蔽字,能够屏蔽信号。未决信号集则保存信号的状态,0表示未产生,1表示处于未决。
这两个信号集本质上都是位图,以0和1来表示信号的状态。
阻塞信号集:
将信号加入该集合后,对他们设置屏蔽,当屏蔽信号后,再收到该信号时,该信号的处理将推后,使其处于未决状态。
未决信号集:
1.信号产生,未决信号集中描述该信号的位由0立刻翻转为1,使其处于未决状态。当信号被处理后,对应位翻转回为0。这一时刻往往非常短暂(信号一旦翻转为1,就会被内核立即处理)。
2.信号产生后由于被阻塞(加入阻塞信号集)不能递达。在屏蔽解除前,信号一直处于未决状态。

在这里插入图片描述

五.信号四要素和常用信号

四要素:
在这里插入图片描述

默认处理动作
在这里插入图片描述
常用信号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值