什么是Linux信号和信号阻塞?

2022-07-10科技192

  1。 信号掩码——被阻塞的信号集

每个进程都有一个用来描述哪些信号传送来将被阻塞的信号集,如果某种信号在某个进程的阻塞信号集中,则传送到该进程的此种信号将会被阻塞。当前被进程阻塞的信号集也叫信号掩码,类型为sigset_t。每个进程都有自己的信号掩码,且创建子进程时,子进程会继承父进程的信号掩码。

2。 信号阻塞和忽略的区别

阻塞的概念与忽略信号是不同的:操作系统在信号被进程解除阻塞之前不会将信号传递出去,被阻塞的信号也不会影响进程的行为,信号只是暂时被阻止传递;当进程忽略一个信号时,信号会被传递出去,但进程将信号丢弃。

3。 信号集的操作

信号集可以由以下几个函数操作:

int sigemptyset(sigset_t *set); //清空信号集

int sigfillset(sigset_t *set); //将所有信号填充进set中

int sigaddset(sigset_t *set, int signum); //往set中添加信号signum

int sigdelset(sigset_t *set, int signum); //从set中移除信号signum

int sigismember(const sigset_t *set, int signum); //判断signnum是不是包含在set中,在返回1,不在返回0

初始化往往可以用sigemptyset将信号集清空,再用sigaddset向信号集中添加信号;或者可以使用sigfillset将所有信号添加到信号集,再用sigdelset将某信号从中删除掉。

4。 sigprocmask介绍

可以使用函数sigprocmask来检查或者修改进程的信号掩码。函数信息如下:

#include

int sigprocmask ( int how, const sigset_t *restrict set,

sigset_t *restrict old );

参数how 是一个整数,说明信号掩码的修改方式:

SIG_BLOCK --- 将set指向的信号集中的信号添加到当前阻塞信号集中;

SIG_UNBLOCK --- 从当前阻塞信号集中移除set指向的信号集中的信号;

SIG_SETMASK --- 指定set所指向的信号集为当前阻塞信号集。

此外,如果参数set 为NULL, 说明不需要修改,如果old 为NULL,sigprocmask会将修改之前的信号集放在*old 之中返回。

5。sigaction回顾

在前面有用过sigaction函数:

include

int sigaction(int signum,const struct sigaction *act,

const struct sigaction *oldact);

该函数是用于注册一个信号处理函数。

  参数结构体sigaction与函数同名,具体信息如下:

struct sigaction {

void (*sa_handler)(int); //老类型的信号处理函数指针

void (*sa_sigaction)(int, siginfo_t *, void *);//新类型的信号处理函数指针

sigset_t sa_mask; //将要被阻塞的信号集合

int sa_flags; //信号处理方式掩码

void (*sa_restorer)(void); //保留

5。

  1 sa_handler:一个函数指针,用于指向原型为void handler(int)的信号处理函数地址(老类型的信号处理函数);

5。2 sa_sigaction:也是一个函数指针,用于指向原型为:

void handler(int (新类型的信号处理函数);

三个参数的含义为:

iSignNum:传入的信号

pSignInfo:与该信号相关的一些信息,它是个结构体

pReserved:保留,现没用

5。

  3 sa_handler和sa_sigaction只应该有一个生效,如果想采用老的信号处理机制,就应该让sa_handler指向正确的信号处理函数;否则应该让sa_sigaction指向正确的信号处理函数,并且让字段sa_flags包含SA_SIGINFO选项。

5。4 sa_mask是一个包含信号集合的结构体,该结构体内的信号表示在进行信号处理时,将要被阻塞的信号。该信号集可以用前面标题3提到的5个函数来进行操作。

5。5 字段sa_flags是一组掩码的合成值,指示信号处理时所应该采取的一些行为,各掩码的含义为:

(1)SA_RESETHAND ---处理完毕要捕捉的信号后,将自动撤消信号处理函数的注册,即必须再重新注册信号处理函数,才能继续处理接下来产生的信号。

(2)SA_NODEFER ---在处理信号时,如果又发生了其它的信号,则立即进入其它信号的处理,等其它信号处理完毕后,再继续处理当前的信号,即递规地处理。如果sa_flags包含了该掩码,则结构体sigaction的sa_mask将无效;

(3)SA_RESTART--- 如果在发生信号时,程序正阻塞在某个系统调用,例如调用read函数,则在处理完毕信号后,接着从阻塞的系统返回。

  该掩码符合普通的程序处理流程,所以一般来说,应该设置该掩码,否则信号处理完后,阻塞的系统调用将会返回失败;

(4)SA_SIGINFO ---指示结构体的信号处理函数指针是哪个有效,如果sa_flags包含该掩码,则sa_sigactiion指针有效,否则是sa_handler指针有效。

需要注意的是:

函数sigprocmask是全程阻塞,在sigprocmask中设置了阻塞集合后,被阻塞的信号将不能再被信号处理函数捕捉,直到重新设置阻塞信号集合。而在sigaction注册信号处理函数时,选择阻塞的信号集只是在处理捕捉的信号时,才对指定的其他信号进行阻塞。

相关文章

双绞线的特点?

双绞线特点较多: 1.传输距离远、传输质量高。由于在双绞线收发器中采用了先进的处理技术,极好地补偿了双绞线对视频信号幅度的衰减以及不同频率间的衰减差,保持了原始图象的亮度和色彩以及实时性,在传输距离达到1km或更远时,图象信号基本无失真。如果采用中继方式,传输距离会更远。 2.布线方便、线缆利用率高...

预警是什么意思?

暴雨预警信号分四级,分别以蓝色、黄色、橙色、红色表示。在大陆,红色暴雨预警信号为最高级;在香港,有三级,黑色暴雨预警信号为最高级,表示在刚过去的3小时内本地部分地区降雨量已达100毫米以上,且雨势可能持续。国务院气象主管机构负责全国预警信号发布、解除与传播的管理工作。地方各级气象主管机构负责本行政区...

采用无线网桥做监控有什么优势?

室外的无线监控,使用无线网桥具有施工简单、节省成本等优点,但是无线网桥对于安装、配置有一定的规范要求,否则就可能会造成监控视频卡顿、画面丢失等问题。 无线网桥最大的优点就是免去了布线的麻烦,节省大量的布线成本通过使用无线网桥进行无线监控,由于不受布线限制,不仅可以满足高清监控要求,无死角视频监控,而...

“做梦”的原理是什么?

所谓的梦,就是平日的愿望或恐惧在睡眠时不受抑制地显现。奥地利的精神病学家及精神分析学派的创始人弗络伊德指出:“梦就是受抑制的潜意识上升为意识的东西。” 每个人都会做梦,而在我们的梦中经常会出现一些与考试有关的事情,其中多半都是梦见题很难,做不出来,而时间又紧,眼看就要到了,可还是做不出来,正在着急的...

双绞线的原理?

双绞线是由一对相互绝缘的金属导线绞合而成。采用这种方式,不仅可以抵御一部分来自外界的电磁波干扰,也可以降低多对绞线之间的相互干扰。把两根绝缘的导线互相绞在一起,干扰信号作用在这两根相互绞缠在一起的导线上是一致的(这个干扰信号叫做共模信号),在接收信号的差分电路中可以将共模信号消除,从而提取出有用信号...

iPhone8为何会在中国遭遇“滑铁卢”?

拒绝使用北斗信号,是最大败笔,赤裸裸的藐视中国人;居然还大言不惭的想赚中国人的钱,真把中国人当傻冒了!连日本人、印度人的狗屁三颗卫星组建的导航信号都接收,中国人的全球北斗,居然就死活不接受,那么很简单,请苹果手机滚出中国!没苹果手机,中国人只会生活得更好,现在谁不知道苹果手机有美国中央情报局开设的专...

液晶板和显像管的区别?

  液晶彩电与显像管彩电存在较大区别,下面从几点进行简单对比:    液晶电视和显像管电视的区别,主要是显示屏的不同,液晶电视采用液晶屏作为图像显示屏,显像管电视采用显像管作为图像的显示器屏。由于这两种显示器件具有本质上的区别:围绕支持这两种显示屏显示图像的电路也完全的不同,并且所显示信号的结构、标...

你为什么坚持用安卓机?

问题:你为什么坚持用安卓机? 回答:说实话,我用过很多的手机,我觉得现在的安卓还是不错的。尤其是对于我们这种经常出差的人来说,还是很好用的。 安卓的灵活性很高说实话,安卓的灵活性真的很高的。为什么这么说?因为不是安卓就是iPhone了。iPhone的价格比较高,这对于预算不多的人来说,很痛苦的事情。...

基站工作原理?

基站的主要功能就是提供无线覆盖,即实现有线通信网络与无线终端之间的无线信号传输。前向信号传输流程如下: 1. 核心网侧的控制信令、语音呼叫或数据业务信息通过传输网络发送到基站(在2G、3G网络中,信号先传送到基站控制器,再传送到基站)。 2. 信号在基站侧经过基带和射频处理,然后通过射频馈线送到天线...

网络和信号的区别?

手机网络信号和手机通信信号区别在于:信号的通道不同,信号的产生方式不同,受影响的因素不同,俩者的用处不同。俩者本身没有什么联系。 1,信号的通道不同:手机网络信号指的是网络数据的通道,手机的网络信号决定移动端上网的速度。手机通信信号指的是通话信号的通道,手机通信信号决定手机通话的质量。 2,信号的产...

拥有10年以上的手机号,139的手机号,你们还在用吗?为什么?

看到这个题目,我还认真地掰着指头算了算,到今年,自己一直在使用的139的移动号已经有20个年头了。 现在依然没有换号换卡,倒真没考虑过面子不面子的问题,主要是因为日久生情吧,对这11位数字的排列组合印象太深刻了,已深深地印在了自己的脑海里。 其次,中国移动的信号相对来讲,要强一些。记得十几年前因为家...

最近想办一个联通号码,不知道现在联通的信号怎么样?

应邀回答本行业问题。 2019年下半年开始,联通的手机信号已经变好了很多了。 2019年,联通对于4G网络进行了大规模的扩容。三大运营商之中,一提到联通,很多人都在说联通的信号不好。其实联通信号不好的原因,这里边是联通的4G频率过高,而且联通本身财力不足,也不能和中国移动一样花那么多钱去买那么多的基...