sigprocmask函数 —— 屏蔽信号、解除信号
sigpending函数 —— 读取当前进程的未决信号集
/*
* @file sigpending.c
* @brief 把所有常规信号的未决状态打印至屏幕
* @version 1.1 无
* @author 北豼
* @date 2022年5月10日
*/
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
/*
* 函数名称: printped
* 函数介绍: 判断未决信号集的状态,并打印至屏幕,信号被屏蔽打印1,没有屏蔽打印0
* 输入参数: sigset_t *ped
* 输出参数: 无
* 返回值 : 无
*/
void printped(sigset_t *ped)
{
int i;
for (i = 1; i < 32; i++)
{
//判断某个信号是否在信号集中
if (sigismember(ped, i) == 1)
{
putchar('1');
}
else
{
putchar('0');
}
}
printf("\n");
}
int main(void)
{
sigset_t myset;
sigset_t oldset;
sigset_t ped;
//设置信号集
sigemptyset(&myset);
sigaddset(&myset, SIGQUIT);
sigaddset(&myset, SIGINT);
sigaddset(&myset, SIGTSTP);
sigaddset(&myset, SIGSEGV);
sigaddset(&myset, SIGKILL);
//把信号集设置到信号屏蔽字中
sigprocmask(SIG_BLOCK, &myset, &oldset);
while(1)
{
sigpending(&ped); //输出被阻塞挂起的信号集
printped(&ped); //判断输出信号集
sleep(2);
}
return 0;
}
屏蔽了Ctrl+c、Ctrl+z、Ctrl+
如果按下了未决状态就会变为1
9号和19号信号比较特别,不可屏蔽