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

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; //信号处理方式掩码
【什么是Linux信号和信号阻塞?】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个函数来进行操作 。


以上关于本文的内容,仅作参考!温馨提示:如遇专业性较强的问题(如:疾病、健康、理财等),还请咨询专业人士给予相关指导!

「辽宁龙网」www.liaoninglong.com小编还为您精选了以下内容,希望对您有所帮助: