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

2022-07-10科技160

  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. Mi Manchi 这个网名,别人艾特你时会有小星星 2. Cx330 宇宙中最孤独且稀有的星星 3. Eliauk 不快乐的时候反过来拼 4.Palpitate 小心翼翼却又急切的心动...

新手如何玩无人机?

新手要玩无人机的话呢,我觉得最好不要自己盲目尝试,因为无人机的操控,受很多因素的影响,你没有经验的话,你根本都不知道为什么会炸鸡。 首先第一点,很多人拿到机器之后什么也不看,通上电直接就飞,而这个在操作的时候其实,无人机的起飞,就像有人飞机的起飞一样,要事先做很多的检查工作,飞机的状态,正常了,到位...

随身WiFi有哪些推荐?

感谢您的阅读,我是互联网从业人员,因为工作中要用到随身WiFi,分享下这个话题,希望对您有帮助!!! 那什么是随身WIFI?从简单点说,就是可以随时随地使用wifi,随身wifi就是可以将有线、2G、3G、4G网络或电脑上的互联网连接转换成wifi信号的设备。随身wifi可以共享出wif...

中国北斗卫星能看自己家房顶吗?精度有多少?

北斗卫星不能看到你家的房顶。 北斗系统它的用途是:定位、导航、授时、测量高程,以及还有发短信的特有功能(GPS没有这一功能)。它通过定位接收器(如汽车上的导航仪里面就有接收器)来接收天空中多颗卫星发出的信号,然后算出你的位置坐标。所以它不能看到你家的房顶。 什么卫星能看到地面的信息呢?我国的高分系列...

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

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

“做梦”的原理是什么?

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

为何网线要用双绞线?

    网线是网络的“血脉”,在组网中具有重要的作用,那么网线的线对为什么要两两缠绕形成双绞线,为什么会有100米的限制,下文具体说一说。     为什么“相互缠绕”?    网线...

双绞线的原理?

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

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

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

你为什么坚持用安卓机?

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

三大运营商就全国而言,哪个的信号好?

应邀回答本行业问题。 就全国范围内来看,三大运营商之中还是中国移动的信号覆盖是最好的。 中国移动手机信号好,是因为中国移动的基站数量最多。我们的手机,需要和基站之间进行双向的信号交互。基站的多少,直接的决定了手机信号的强弱。 现在运营商主要的信号是依靠宏基站覆盖,宏基站只能覆盖室外以及部分室内的浅层...

网络和信号的区别?

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

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。