信号集和信号集操作函数信号屏蔽集设置和演示

Posted 阿龙亡命天涯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了信号集和信号集操作函数信号屏蔽集设置和演示相关的知识,希望对你有一定的参考价值。


阻塞信号集可以读写、未决信号集只能读不能写

信号集操作函数

为了方便对多个信号进行处理,一个用户进程常常需要对多个信号做出处理,在 Linux 系统中引入了信号集(信号的集合)。这个信号集有点类似于我们的 QQ 群,一个个的信号相当于 QQ 群里的一个个好友。信号集是一个能表示多个信号的数据类型,sigset_t set,set即一个信号集。既然是一个集合,就需要对集合进行添加/删除等操作。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>

void show_set(sigset_t* s)

	for(i=1;i<32;i++)
	
		if(sigismember(s,i))
		
			printf("1");
		
		else
		
			printf("0");
		
	
	putchar('\\n');


//信号集处理函数
int main()

	int i=0;
	//信号集集合
	sigset_t set;
	//清空集合
	sigemptyset(&set);

	show_set(&set);
	
	//将所有的信号加入到set集合中
	sigfillset(&set);
	show_set(&set);
	
	return 0;


若加上:sigdelset(&set,SIGINT); sigdelset(&set,SIGQUIT);
则输出:

继续添加代码:sigaddset(&set,SIGINT);再show_set(&set);
则输出:

sigprocmask函数

信号阻塞集也称信号屏蔽集、信号掩码。每个进程都有一个阻塞集,创建子进程时子进程将继承父进程的阻塞集。信号阻塞集用来描述哪些信号递送到该进程的时候被阻塞(在信号发生时记住它,直到进程准备好时再将信号通知进程)。所谓阻塞并不是禁止传送信号, 而是暂缓信号的传送。若将被阻塞的信号从信号阻塞集中删除,且对应的信号在被阻塞时发生了,进程将会收到相应的信号。我们可以通过 sigprocmask() 修改当前的信号掩码来改变信号的阻塞情况。



sigpending函数


未决信号集只能读不能写,因为是内核完成的

以上是关于信号集和信号集操作函数信号屏蔽集设置和演示的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp Linux的信号集操作,操作信号屏蔽字(阻塞信号集),读取未决信号集

进程信号的本质与处理

信号的屏蔽,信号集

linux信号

linux信号

SylixOS的信号屏蔽浅析