Linux学习笔记(06-15)信号集的使用

信号集(signal set)
POSIX.1定义数据类型sigset_t以包含一个信号集,并且定义了下列5个处理信号集的函数。
#include <signal.h>
int sigemptyset(sigset_t * set);
int sigfillset(sigset_t * set);
int sigaddset(sigset_t * set, int signo);
int sigdelset(sigset_t * set, int signo);
int sigismember(const sigset_t * set, int signo);

sigemptyset函数将整型设置为0.
sigfillset函数将整型中各位设置为1.


int sigprocmask(int how, const sigset_t * restrict set, sigset_t * restrict oset);
参数how只是如何修改当前信号屏蔽字。SIG_BLOCK、SIG_UNBLOCK、SIG_SETMASK
SIG_SETMASK将信号屏蔽字恢复为先前的值。


函数sigpending返回一信号集。
int sigpending(sigset_t * set);


函数sigaction检查或修改与制定信号相关联的处理动作。
int sigaction(int signo, const struct sigaction * restrict act, struct sigaction *restrict oact);


函数sigsetjmp和siglongjmp
当捕捉到一个信号时,进入信号捕捉函数,此时当前信号被自动地加到进程的信号屏蔽字中,这阻止了后来产生的这种信号中断该信号处理程序。
int sigsetjmp(sigjmp_buf env, int savemask);
void siglongjmp(sigjmp_buf env, int val);
如果savemask非0,则sigsetjmp在env中保存进程的当前信号屏蔽字。调用siglongjmp时,如果带非0 savemask的sigsetjmp调用已经保存了env,则siglongjmp从其中恢复保存的信号屏蔽字。


函数sigsuspend
(如果在解除阻塞和pause之间发生了信号)在一个原子操作中先恢复信号屏蔽字,然后使进程休眠。
int sigsuspend(const sigset_t * sigmask);
在捕捉到一个信号或发生了一个会终止该进程的信号之前,该进程被挂起。
如果它返回到调用者,则总是返回-1.


abort函数的功能是使程序异常终止。


POSIX.1要求system忽略SIGINT和SIGQUIT,阻塞SIGCHLD。

你可能感兴趣的:(Linux学习笔记(06-15)信号集的使用)