一、信号集(sigset_t)
信号集表示一个信号集合,可以将其传递给sigprocmask函数,指定阻塞哪些信号。下面是操作信号集的函数:
#include <signal.h> int sigemptyset(sigset_t *set);//清空信号集 int sigfillset(sigset_t *set);//填充信号集 int sigaddset(sigset_t *set, int signo);//向信号集中加入指定信号signo int sigdelset(sigset_t *set, int signo);//从信号集中移除指定信号signo |
All four return: 0 if OK, 1 on error |
int sigismember(const sigset_t *set, int signo);//测试signo是否在信号集中 |
Returns: 1 if true, 0 if false, 1 on error |
二、sigprocmask函数
sigprocmask函数可以用来设置进程的信号掩码,即指定哪些信号需要被阻塞;它也可以用来获取当前进程的信号掩码。
int sigprocmask ( int how, const struct * set, struct * oset );
how指定sigprocmask的操作类型:
SIG_BLOCK 指定将set中的信号加入当前的信号掩码中,即添加需要阻塞的信号;
SIG_UNBLOCK 指定将set中的信号从当前的信号掩码中移除,即解除阻塞信号;
SIG_SETMASK 设置当前的信号掩码为set;
如果oset不为null,当前进程的信号掩码通过oset返回。
如果set为null,则当前信号掩码通过oset返回,how将被忽略。
如果调用sigprocmask时,有当前被挂起的信号被解除阻塞,则在sigprocmask返回之前至少有一个信号被传递给进程。
sigprocmask是为单线程的进程而设计的。
三、sigpending函数
int sigpending ( sigset_t *set );
通过set返回当前被阻塞而挂起的信号。