Linux信号集与信号集相关函数

阻塞信号集和未决信号集:

例如:当进程收到SIGINT信号后,首先被保留在未决信号集中,此时标识位为1,当这个信号被处理之前,检查阻塞信号集中对应的编号的位上的标识是否为1

为1表示该信号被当前进程阻塞了,此时该信号暂时不被处理,对应的标识仍然为1

为0表示该信号没有被当前进程阻塞,则未决信号集的这个信号需要被处理(忽略,执行默认动作,执行用户自定义函数),当信号被处理完成后,未决信号集中这个信号的标识从1变0,说明该信号已经抵达(被处理)

加入该信号在阻塞的使用产生多次,未决信号集标识位仍为1,在解除对该信号的阻塞后,此信号只被处理一次

 信号集相关函数:

int sigemptyset(sigset_t *set);

函数说明:将某个信号集清0(信号集的信号都变0)

返回值:成功返回0,失败-1

int sigfillset(sigset_t *set);

函数说明:将某个信号集置1

返回值:成功返回0,失败-1

int sigaddset(sigset_t *set,int signum);

函数说明:将某个函数加入到信号集中

返回值:成功返回0,失败-1

int sigdelset(sigset_t *set,int signum);

函数说明:将某个函数从信号集中移除

返回值:成功返回0,失败-1

int sigismember(const sigset_t *set,int signum);

函数说明:判断某个信号是否在信号集中

函数返回值:在->1;不在->0;出错->-1

 sigprocmask函数:

函数原型: int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);

how参数:

 SIG_BLOCK
              The set of blocked signals is the union of the current  set  and
              the set argument.(将某个信号集的所有为1的信号设置为阻塞)

       SIG_UNBLOCK
              The  signals  in set are removed from the current set of blocked
              signals.  It is permissible to attempt to unblock a signal which
              is not blocked.((将某个信号集的所有为1的信号从阻塞信号集移除)

       SIG_SETMASK
              The set of blocked signals is set to the argument set.

set参数

传入参数,是一个自定义信号集合。

oldset参数:

传出参数,保存旧的信号屏蔽字

sigpending函数:
函数原型:int sigpending(sigset_t *set);

函数说明:读取当前进程的未决信号集,将未决信号集拷贝到自定义信号集(set)中

函数参数:set 传出参数

函数返回值:成功返回0,失败返回-1

测试:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<unistd.h>
#include <signal.h>
#include <sys/time.h>
void handler(int signo)
{
	printf("signo==[%d]\n",signo);
}
int main()
{
	signal(SIGINT,handler);//不同信号可以用同一个信号处理函数
	signal(SIGQUIT,handler);

	sigset_t set;

//初始化,全部置0
	sigemptyset(&set);

//让set信号集的SIGINT,SIGQUIT信号位变1
	sigaddset(&set,SIGINT);
	sigaddset(&set,SIGQUIT);

	// int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
//将set信号集中位为1的信号加入阻塞信号集	
sigprocmask(SIG_BLOCK,&set,NULL);
	int i=0;
	int j=1;
	sigset_t pend;//定义一个传出信号集,获取未决信号集
	while(1)
	{
		sigemptyset(&pend);//初始化
		sigpending(&pend);//获取未决信号集
		for(i=1;i<32;i++)打印1到32编号信号是否在未决信号集中
		{
			if(sigismember(&pend,i)==1)
			{
				printf("1");//存在打印1
			}
			else if(sigismember(&pend,i)==0)
			{
				printf("0");
			}
		}
          printf("\n");
		if(j++%5==0)//每5次将set信号集中位为1的信号从阻塞信号集中移除
		{
			sigprocmask(SIG_UNBLOCK,&set,NULL);
		}
		else //除了5的倍数次继续将set信号集中位为1的信号加入阻塞信号集
		{
			sigprocmask(SIG_BLOCK,&set,NULL);
		}
		sleep(1);
	}
	return 0;
}

结果:

我们从结果可以发现未决信号集中的信号并不会叠加不管在阻塞状态下发送多少次信号,每五次只会执行一次,然后这两个信号在未决信号区中也不存在了。接下来又把他们加入到阻塞信号集。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/387846.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT高效提问—prompt实践(法律助手)

ChatGPT高效提问—prompt实践&#xff08;法律助手&#xff09; ​ 作为现代法治国家的公民&#xff0c;无论我们是否从事法律相关的工作&#xff0c;都难免会遇到法律问题&#xff0c;那么如何争取自身合法利益最大化呢&#xff1f;很多人大概率会第一时间查询相关的法律知识…

Java奇缘:林浩然与杨凌芸的数学冒险记

Java奇缘&#xff1a;林浩然与杨凌芸的数学冒险记 Java Adventure: The Mathematical Odyssey of Lin Haoran and Yang Lingyun 在Java编程世界的某一个角落&#xff0c;住着两位才华横溢的程序员——林浩然和杨凌芸。林浩然&#xff0c;人称“算法大侠”&#xff0c;对Java Ma…

C语言中整数除法的特性

目录 介绍 解决方法 例1 例2 介绍 在 C 语言中&#xff0c;整数除法有一个特性&#xff0c;即它会对结果进行截断而不是四舍五入。这意味着无论结果是正数还是负数&#xff0c;除法的结果都将向零取整。这也就是说&#xff0c;C 语言中的整数除法会直接截断小数部分&#x…

Spring Boot 笔记 021 项目部署

1.1 引入坐标&#xff0c;并双击package打包成jar包 1.2 在服务器上运行jar包 1.3 使用postman测试 2.1 运行配置 2.1.1 命令更改端口 java -jar big-event-1.0-SNAPSHOT.jar --server.port7777 2.1.2 环境变量更新&#xff08;略&#xff09; 2.1.3 外部配置文件&#xff0c…

LeetCode:118.杨辉三角

118. 杨辉三角 - 力扣&#xff08;LeetCode&#xff09;&#xff0c; 前言&#xff1a;平平无奇的实现&#xff0c;数组理清了的话就很easy&#xff0c;值得说的是给定的参数 int* returnSize, int** returnColumnSizes 是什么意思&#xff0c;还得熟悉适应&#xff0c;博主…

深入了解pip和conda:高效Python环境管理的必备指南

pip相关命令: 更新包之前最好更新一下pip&#xff0c;因为更新其他包底层是依赖 pip pip show pippython -m pip install --upgrade pippython更新包&#xff1a; - ​ pip install --upgrade 包 pip install pandas- ​ pip install --upgrade 包名称版本号查看那些包需要更…

【leetcode热题100】交错字符串

给定三个字符串 s1、s2、s3&#xff0c;请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下&#xff0c;其中每个字符串都会被分割成若干 非空 子字符串&#xff1a; s s1 s2 ... snt t1 t2 ... tm|n - m| < 1交错 是 s1 …

CAN通讯协议学习

介绍 它是一种异步通讯&#xff0c;can_high和can_low两条线利用的是电位差传输信号&#xff0c;抗干扰能力强&#xff0c;但是必须要有can控制器如TJA1050&#xff08;我的开发板&#xff09; 当 CAN 节点需要发送数据时&#xff0c;控制器把要发送的二进制编码通过 CAN_Tx 线…

牛客JZ 36二叉搜索树与双向链表

描述 输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的双向链表。如下图所示 数据范围&#xff1a;输入二叉树的节点数 0≤n≤10000≤n≤1000&#xff0c;二叉树中每个节点的值 0≤val≤10000≤val≤1000 要求&#xff1a;空间复杂度O(1)&#xff08;即在原树上…

计算机毕业设计分享-SSM实验室耗材管理系统 13205(赠送源码数据库)JAVA、PHP,node.js,C++、python,大屏数据可视化等

SSM实验室耗材管理系统 摘 要 本课题研究的实验室耗材管理系统&#xff0c;主要功能模块包括用户管理、耗材管理、入库记录、出库记录、报废登记、供应商管理、耗材类别、实验室管理等&#xff0c;采取面对对象的开发模式进行软件的开发和硬体的架设&#xff0c;能很好的满足实…

CSS设置盒子阴影

语法 box-shadow: *h-shadow v-shadow blur spread color* inset; 注释: box-shadow向框添加一个或多个阴影. 该属性是由逗号分隔的阴影列表,每个阴影由2-4个长度值、可选的颜色值及可选的inset关键词来规定。省略长度的值是0。 外阴影 a、给元素右边框和下边框加外阴影——把…

Git基础使用

Git 要想了解Git&#xff0c;首先需要我们了解一下VCS——版本控制系统&#xff08;version control system&#xff09; VCS 版本控制是一种记录一个或若干文件内容变化&#xff0c;以便将来查阅特定版本修订情况的系统。版本控制系统不仅可以应用于软件源代码的文本文件&a…

【机器学习案例3】从科学论文图片中提取标题、作者和摘要【含源码】

在这个项目中,我的目标是从科学论文图片中提取某些部分(标题、作者和摘要)。预期提取部分是科学论文中常见的部分,例如标题、摘要和作者。输入与最终结果。我的输入是将第一页纸转换成图像。最终结果是一个 txt 文件,其中包含标题、作者和摘要部分,如下图1和图2所示。我将…

《区块链公链数据分析简易速速上手小册》第9章:区块链数据工具和资源(2024 最新版)

文章目录 9.1 数据获取工具9.1.1 基础知识9.1.2 重点案例&#xff1a;使用web3.py获取以太坊交易数据准备工作实现步骤步骤1: 连接到以太坊网络步骤2: 获取特定地址的交易数据 扩展应用结语 9.1.3 拓展案例 1&#xff1a;使用 Etherscan API 获取交易数据准备工作实现步骤步骤1…

【AI视野·今日CV 计算机视觉论文速览 第295期】Tue, 23 Jan 2024

AI视野今日CS.CV 计算机视觉论文速览 Tue, 23 Jan 2024 Totally 134 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Exploring Simple Open-Vocabulary Semantic Segmentation Authors Zihang Lai开放词汇语义分割模型旨在从一组任意开放词…

专业140+总分420+东北大学841通信专业基础考研经验东大电子信息与通信工程,真题,大纲,参考书。

今年考研顺利上岸&#xff0c;被东北大学通信工程录取&#xff0c;其中专业课841通信专业基础140&#xff0c;数二140&#xff0c;总分420&#xff0c;整体每门课都还是比较均衡&#xff0c;刚开始考研前也和大家一样&#xff0c;焦虑&#xff0c;紧张&#xff0c;面对考研怕失…

本地存储云存储使用量对比

目录 块存储 文件存储 对象存储 使用传统式存储&#xff0c;需要购买新的存储系统、存储容量&#xff0c;还需要为未来的发展预留一部分容量&#xff0c;同时未来如果业务量规模扩大&#xff0c;还可能需要在数据中心托管并维护总容量&#xff0c;这都将大大增加成本。 使用…

【Linux笔记】进程间通信之管道

一、匿名管道 我们在之前学习进程的时候就知道了一个概念&#xff0c;就是进程间是互相独立的&#xff0c;所以就算是两个进程是父子关系&#xff0c;其中一个进程退出了也不会影响另一个进程。 也因为进程间是互相独立的&#xff0c;所以两个进程间就不能直接的传递信息或者…

算法沉淀——栈(leetcode真题剖析)

算法沉淀——栈 01.删除字符串中的所有相邻重复项02.比较含退格的字符串03.基本计算器 II04.字符串解码05.验证栈序列 栈&#xff08;Stack&#xff09;是一种基于先进后出&#xff08;Last In, First Out&#xff0c;LIFO&#xff09;原则的数据结构。栈具有两个主要的操作&am…

PgSQL内核特性 - push-based pipeline 执行引擎

PgSQL内核特性 - push-based pipeline 执行引擎 数据库的SQL执行引擎负责处理和执行SQL请求。通常情况下&#xff0c;查询优化器会输出物理执行计划&#xff0c;一般由一系列的算子组成。当前&#xff0c;有两种算子流水线构建方式&#xff1a;1&#xff09;需求驱动的流水线&a…