linux开发5-信号
signal
使用 signal () 函数可以捕捉进程中产生的信号,并且修改捕捉到的函数的行为,这个信号的自定义处理动作是一个回调函数,内核通过 signal () 得到这个回调函数的地址,在信号产生之后该函数会被内核调用。
sigaction
使用 signal () 函数可以捕捉进程中产生的信号,并且修改捕捉到的函数的行为,这个信号的自定义处理动作是一个回调函数,内核通过 signal () 得到这个回调函数的地址,在信号产生之后该函数会被内核调用。
sigset_t
sigemptyset
// 将set集合中所有的标志位设置为0
int sigemptyset(sigset_t *set);
sigaddset
// 将set集合中某一个信号(signum)对应的标志位设置为1
int sigaddset(sigset_t *set, int signum);
sigprocmask
因为用户是不能直接操作内核中的阻塞信号集和未决信号集的,必须要调用系统函数,关于阻塞信号集可以通过系统函数进行读写操作,未决信号集只能对其进行读操作。
先来看一下读 / 写阻塞信号集的函数:
#include <signal.h>
// 使用这个函数修改内核中的阻塞信号集
// sigset_t 被封装之后得到的数据类型, 原型:int[32], 里边一共有1024给标志位, 每一个信号对应一个标志位
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
-
参数:
-
how:
-
SIG_BLOCK: 将参数 set 集合中的数据追加到阻塞信号集中
-
SIG_UNBLOCK: 将参数 set 集合中的信号在阻塞信号集中解除阻塞
-
SIG_SETMASK: 使用参 set 结合中的数据覆盖内核的阻塞信号集数据
-
oldset: 通过这个参数将设置之前的阻塞信号集数据传出,如果不需要可以指定为 NULL
-
-
返回值:函数调用成功返回 0,调用失败返回 - 1
sigprocmask () 函数有一个 sigset_t 类型的参数,对这种类型的数据进行初始化需要调用一些相关的操作函数:

浙公网安备 33010602011771号