linux 信号集操作

信号掩码 – 被阻塞的信号集

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

信号阻塞和忽略的区别

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

信号集的操作

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

//以上四个函数返回:若成功则为0,若出错则为-1

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

int sigprocmask(int how, const sigset_t *set, sigset_t *oldset); //设定对信号屏蔽集内的信号的处理方式(阻塞或不阻塞)

参数说明:

how : 用于指定信号修改的方式,可能选择有3种

SIG_BLOCK 将 set 所指向的信号集合中包含的信号加到当前的信号掩码中.即信号掩码与 set 信号集进行或操作.

SIG_UNBLOCK 将 set 所指向的信号集中包含的信号从当前的信号掩码中删除.即信号掩码和set进行与操作。

SIG_SETMASK 将set的值设定为新的进程信号掩码。即set对信号掩码进行了赋值操作。

set : 为指向信号集的指针,在此专指新设的信号集,如果仅想读取现在的屏蔽值,可将其置为NULL。

oldset : 也是指向信号集的指针,在此存放原来的信号集。可用来检测信号掩码中存在什么信号。

返回值:成功执行时,返回0。失败返回-1,errno被设为EINVAL。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-09 01:56:52

linux 信号集操作的相关文章

linux 信号集 二 sigaction

sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作). 他是POSIX的信号接口,而signal()是标准C的信号接口(如果程序必须在非POSIX系统上运行,那么就应该使用这个接口) 给信号signum设置新的信号处理函数act, 同时保留该信号原有的信号处理函数oldact int sigaction(int signo,const struct sigaction *restrict act, struct sigaction *restrict oact);

linux 信号集

[sigprocmask系统调用]功能描述:设定对信号屏蔽集内的信号的处理方式(阻塞或不阻塞).用法:#include <signal.h>int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);参数:how:用于指定信号修改的方式,可能选择有三种 SIG_BLOCK //加入信号到进程屏蔽.SIG_UNBLOCK //从进程屏蔽里将信号删除.SIG_SETMASK //将set的值设定为新的进程屏蔽. set:为指向信号

signal函数、sigaction函数及信号集(sigemptyset,sigaddset)操作函数

信号是与一定的进程相联系的.也就是说,一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如,一个进程可以忽略某些信号而只处理其他一些信号:另外,一个进程还可以选择如何处理信号.总之,这些总与特定的进程相联系的.因此,首 先要建立其信号和进程的对应关系,这就是信号的安装登记. Linux 主要有两个函数实现信号的安装登记:signal和sigaction.其中signal在系统调用的基础上实现,是库函数.它只有两个参数,不支持信号 传递信息,主要是用于前32个非实时信号的安装:而sigact

Linux信号、信号处理和信号处理函数

信号(signal)是一种软件中断,它提供了一种处理异步事件的方法,也是进程间惟一的异步通信方式.在Linux系统中,根据POSIX标准扩展以后的信号机制,不仅可以用来通知某种程序发生了什么事件,还可以给进程传递数据. 一.信号的来源 信号的来源可以有很多种试,按照产生条件的不同可以分为硬件和软件两种. 1.  硬件方式 当用户在终端上按下某键时,将产生信号.如按下组合键后将产生一个SIGINT信号. 硬件异常产生信号:除数据.无效的存储访问等.这些事件通常由硬件(如:CPU)检测到,并将其通知

Linux信号(signal) 机制分析

[摘要]本文分析了Linux内核对于信号的实现机制和应用层的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核对于信号的处理流程包括信号的触发/注册/执行及注销等.最后介绍了应用层的相关处理,主要包括信号处理函数的安装.信号的发送.屏蔽阻塞等,最后给了几个简单的应用实例. [关键字]软中断信号,signal,sigaction,kill,sigqueue,settimer,sigmask,sigprocmask,sigset_t 1       信

linux信号-------初涉

一.信号的本质 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件.在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达.进程之间可以互相通过系统调用kill发送软中断信号.内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件.信号机制除了基本通知功能外,还可以传递附加信息 二.信号的分类 1)

linux信号机制分析

[摘要]本文分析了Linux内核对于信号的实现机制和应用层 的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核对于信号的处理流程包括信号的触发/注册/执行 及注销等.最后介绍了应用层的相关处理,主要包括信号处理函数的安装.信号的发送.屏蔽阻塞等,最后给了几个简单的应用实例. [关键字]软中断信号,signal,sigaction,kill,sigqueue,settimer,sigmask,sigprocmask,sigset_t 1      

Linux信号实践(3) --信号内核表示

信号在内核中的表示 执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending).进程可以选择阻塞(Block)某个信号.被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作. 注意,阻塞和忽略是不同,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作.信号在内核中的表示可以看作是这样的: 图-信号的发送过程 解释说明: 1)PCB进程控制块(task_struct)中函数有信号屏蔽状态字(block)和信

Linux信号阻塞与未达

信号在内核中的表示 执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending).进程可以选择阻塞(Block)某个信号.被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作. 注意,阻塞和忽略是不同,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作.信号在内核中的表示可以看作是这样的: @font-face { font-family: "Times New Roman"; }@font-fa