Linux--信号阻塞与屏蔽

Posted aspirs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux--信号阻塞与屏蔽相关的知识,希望对你有一定的参考价值。

from: https://www.cnblogs.com/kex1n/p/8296623.html

1. sigprocmask函数提供屏蔽和解除屏蔽信号的功能。 
从而实现关键代码的运行不被打断。 
函数声明如下:

  int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
其中参数 how可设置的参数为:SIG_BLOCK, SIG_UNBLOCK,SIG_SETMASK 
SIG_BLOCK: 
按照参数 set 提供的屏蔽字,屏蔽信号。并将原信号屏蔽保存到oldset中。 
SIG_UNBLOCK: 
按照参数 set 提供的屏蔽字进行信号的解除屏蔽。针对Set中的信号进行解屏。 
SIG_SETMASK: 
按照参数 set 提供的信号设置重新设置系统信号设置。

2. 信号屏蔽与解屏常见实现 
方法一: SIG_BLOCK, SIG_UNBLOCK成对实现 
优点oldset可以不管。

方法二: 
SIG_BLOCK设置屏蔽,保存原有信号设置。 
SIG_SETMASK重新恢复原有设置。

3. 屏蔽过程中接受到的信号如何处理 
在信号屏蔽过程中,出现的所有被屏蔽的信号,不管发生多少次,在信号解除屏蔽后,系统会执行一次被屏蔽信号上的操作。

以上是关于Linux--信号阻塞与屏蔽的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp Linux的信号集操作,操作信号屏蔽字(阻塞信号集),读取未决信号集

linux c编程:信号 sigsuspend

信号集和信号集操作函数信号屏蔽集设置和演示

linux都有哪些信号不会被阻塞

linux信号机制分析

Linux设备驱动之并发控制