创建一个信号阻塞集
#include<signal.h>
int sigprocmask(int how,const sigset_t *set ,sigset_t *oldset);
功能:
检查或修改信号阻塞集,根据how指定的方法对进程的阻塞集合进行修改,新的信号阻塞集由set指定,而原先的信号阻塞集合由oldset保存。
参数:
how:信号阻塞集合的修改方法。
set:要操作的信号集地址。
oldset:保存原先信号集地址。
参数how的取值
取值 | 作用 |
---|---|
SIG_BLOCK | 向信号阻塞集合中添加set信号集 |
SIG_UNBLOCK | 从信号阻塞集合中删除set集合 |
SIG_SETMASK | 将信号阻塞集合设为set集合 |
注: 若set为NULL,则不改变信号阻塞集合,函数只把当前信号阻塞集合保存到oldset中。
返回值:
成功: 返回 0
失败: 返回 -1
案例代码:
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
int main()
{
int i;
sigset_t set;
sigemptyset(&set);
sigaddset(&set,SIGINT);
while(1)
{
//将set信号集添加到信号阻塞集中
sigprocmask(SIG_BLOCK,&set,NULL);
for(i=0;i<5;i++)
{
printf("SIGINT signal is blocked\n");
sleep(1);
}
//将set信号集从信号阻塞集中山吹
sigprocmask(SIG_UNBLOCK,&set,NULL);
for(i=0;i<5;i++)
{
printf("SIGINT signal is unblocked\n");
sleep(1);
}
}
return 0;
}
执行结果: