信号集 -- 2




信号集是一个用来表示多个信号的数据类型作为很多信号处理函数的参数,用来告诉内核不允许发生信号集中的信号因为信号数目可能超过一个整型量所能表示的最大值,因此,POSIX定义了数据类型 sigset_t 以包含一个信号集 以下是五个信号集处理函数:int sigemptyset(sigset_t *set); int sigfillset(sigset_t * set); int sigaddset(sigset_t *set,int signum); int sigdelset(sigset_t * set,int signum); int sigismember(const sigset_t *set,int signum); 前四个函数若调用成功则返回0,否则返回-1第五个函数如果信号在该信号集中,则返回1,否则返回0,调用出错返回-1 所有应用程序在使用信号集前,需要首先通过调用 sigemptyset 或 sigfillset 函数初始化信号集,让信号集变成空集或包含所有信号然后,可以调用 sigaddset 或 sigdelset 函数在信号集中增加或删除信号,调用 sigismember 测试信号是否存在于信号集中&nbs
#读书笔记    #技术帖    #linux    #unix   
信号的产生、阻塞和递送当引发信号的时间发生时,内核向进程发送一个信号,事件可以是硬件异常(如除以0)、软件条件(如alarm计时器超时)、终端产生的信号或调用kill函数产生的信号信号产生时,内核通常在进程表中设置一个某种形式的标志,这一动作,我们称之为“向进程递送了一个信号”,信号产生和递送之间,称信号是“未决的”进程可以选用信号递送阻塞,如果为进程产生了一个选择为阻塞的信号,而且对该信号的动作是系统默认动作或捕捉该信号,则为该进程将此信号保持未决状态,知道进程对此信号解除阻塞,或将此信号的动作改为忽略需要注意的是,内核是在递送信号的时候决定信号的动作的,而不是在信号产生时,因此进程可以在信号递送给他之前改变信号的动作通过调用 sigpending 函数可以判定哪些信号被设置为阻塞并处于未决状态在进程解除对某个信号的阻塞之前,大多数UNIX实现不允许系统递送该信号多次,相同信号只会递送一次信号屏蔽字每个进程都有一个信号屏蔽字,规定了当前要阻塞递送到进程的信号集,每种可能的信号,该屏蔽字中都有一位与之对应,进程可以调用 sigprocmask 函数来检测和更改其当前信号屏蔽字 
#读书笔记    #技术帖    #linux    #unix   



京ICP备15018585号