通俗易懂说信号(5)sigprocmask
通俗易懂说信号(1)信号
https://blog.csdn.net/lqy971966/article/details/88938079
通俗易懂说信号(2)信号集及操作
https://blog.csdn.net/lqy971966/article/details/103176646
通俗易懂说信号(3)signalfd
https://blog.csdn.net/lqy971966/article/details/103531513
通俗易懂说信号(4)Linux信号列表及其详解
https://blog.csdn.net/lqy971966/article/details/106714752
通俗易懂说信号(5)sigprocmask
https://blog.csdn.net/lqy971966/article/details/117919696
1. sigprocmask 定义
用于改变进程的当前阻塞信号集。
可以根据参数how指定的方法修改进程的信号屏蔽字。
2. sigprocmask 参数说明
#include <signal.h>
int sigprocmask( int how, const sigset_t *restrict set, sigset_t *restrict oset );
how的取值:
SIG_BLOCK 把参数set中的信号添加到信号屏蔽字中
SIG_SETMASK 把信号屏蔽字设置为参数set中的信号
SIG_UNBLOCK 从信号屏蔽字中删除参数set中的信号
set包含了我们希望阻塞的附加信号,就是设置屏蔽信号。
首先,若 oset 是非空指针,那么进程的当前信号屏蔽字通过oset返回。
其次,若 set 是一个非空指针,则参数how指示如何修改当前信号屏蔽字。
返回值:若成功则返回0,若出错则返回-1
3. 例子说明
3.1 例子1
sigset_t mask;
int cc;
sigemptyset(&mask);
sigaddset(&mask, SIGQUIT);
sigaddset(&mask, SIGUSR1);
cc = sigprocmask(SIG_BLOCK, &mask, NULL);
assert(cc == 0);
作用:在进程中屏蔽退出信号和用户1信号。
参考:
http://www.voidcn.com/article/p-noavawjn-tv.html
3.2 例子2
sigset_t stMask;
/* 主线程信号屏蔽,以防主线程无法收到teminal信号 */
(VOID)sigemptyset(&stMask);
(VOID)sigaddset(&stMask, SIGTERM);
(VOID)pthread_sigmask(SIG_BLOCK, &stMask, NULL);
作用:在进程中屏蔽 SIGTERM程序结束(terminate)信号。
参考:
https://www.cnblogs.com/nufangrensheng/p/3515257.html
http://blog.chinaunix.net/uid-24876683-id-1741933.html