linux信号掩码线程,20.10 信号掩码(阻塞信号传递)
20.10 信号掩码(阻塞信号传递)
内核会为每个进程维护一个信号掩码,即一组信号,并将阻塞其针对该进程的传递。如果将遭阻塞的信号发送给某进程,那么对该信号的传递将延后,直至从进程信号掩码中移除该信号,从而解除阻塞为止。(由33.2.1节可知,信号掩码实际属于线程属性,在多线程进程中,每个线程都可使用pthread_sigmask()函数来独立检查和修改其信号掩码。)
向信号掩码中添加一个信号,有如下几种方式。
当调用信号处理器程序时,可将引发调用的信号自动添加到信号掩码中。是否发生这一情况,要视sigaction()函数在安装信号处理器程序时所使用的标志而定。
使用sigaction()函数建立信号处理器程序时,可以指定一组额外信号,当调用该处理器程序时会将其阻塞。
使用sigprocmask()系统调用,随时可以显式向信号掩码中添加或移除信号。
对前两种情况的讨论将推迟到 20.13 节对sigaction()函数的介绍之后,现在先来讨论sigprocmask()函数。
使用sigprocmask()函数既可修改进程的信号掩码,又可获取现有掩码,或者两重功效兼具。how参数指定了sigprocmask()函数想给信号掩码带来的变化。
SIG_BLOCK
将set指向信号集内的指定信号添加到信号掩码中。换言之,将信号掩码设置为其当前值和set的并集。
SIG_UNBLOCK
将set指向信号集中的信号从信号掩码中移除。即使要解除阻塞的信号当前并未处于阻塞状态,也不会返回错误。
SIG_SETMASK
将set指向的信号集赋给信号掩码。
上述各种情况下,若oldset参数不为空,则其指向一个sigset_t结构缓冲区,用于返回之前的信号掩码。
如果想获取信号掩码而又对其不作改动,那么可将set参数指定为空,这时将忽略how参数。
要想暂时阻止信号的传递,可以使用程序清单20-5中所示的一系列调用来阻塞信号,然后再将信号掩码重置为先前的状态以解除对信号的锁定。
程序清单20-5:暂时阻塞信号传递
SUSv3规定,如果有任何等待信号因对sigprocmask()的调用而解除了锁定,那么在此调用返回前至少会传递一个信号。换言之,如果解除了对某个等待信号的锁定,那么会立刻将该信号传递给进程。
系统将忽略试图阻塞SIGKILL和SIGSTOP信号的请求。如果试图阻塞这些信号,sigprocmask()函数既不会予以关注,也不会产生错误。这意味着,可以使用如下代码来阻塞除SIGKILL和SIGSTOP之外的所有信号:
【责任编辑:book TEL:(010)68476606】
点赞 0
linux信号掩码线程,20.10 信号掩码(阻塞信号传递)相关推荐
- linux 可定义信号数,Linux系统编程(20)——信号基本概念
信号及信号来源 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知 ...
- [2022.8.20][10 信号]使用sigprocmask函数阻塞SIGQUIT信号
1 相关函数介绍 1.1 信号集函数 sigset_t表示一个信号集,如下为5个处理信号集的函数: #include <signal.h>//成功返回0,出错返回-1 int sigemp ...
- 【B站视频笔记】linux 进程间通信(ipc)信号(软中断信号)signal库函数、可靠信号和不可靠信号、信号集sigprocmask(信号掩码、信号递达Delivery、信号未决Pending)
[视频教程]Linux信号详解(可靠信号.不可靠信号.阻塞信号.信号处理函数) [博文]Linux信号 文章目录 背景 课程笔记 一.如何让程序在后台运行 1.加"&"符号 ...
- Linux系统编程【文件IO、进程、进程间通信、信号、线程、互斥】
linux系统编程 个人通过学习,手打了一份48000字的Linux系统编程的笔记,包含了[文件IO.进程.进程间通信.信号.多线程.互斥]等知识点,并给出了大量的代码案例对每个重要的知识点进行了代码 ...
- Linux系统中消息队列,共享内存、信号和线程的基本操作使用方法
Linux系统中消息队列,共享内存.信号和线程高级操作 第十一章 消息队列 10.1消息队列定义 10.2 消息队列特点 10.3 key值 10.4 创建消息队列 10.4.1 发送消息 10.4. ...
- Linux信号 六 信号与线程的关系
" POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX, 缩写为 POSIX ),POSIX标准定义了操作系统应该为应用 ...
- linux 信号_Linux的信号和线程
Linux的信号和线程-Tech Talk 让技术发出声音www.ttalk.im 什么是线程 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元. ...
- linux线程关闭信号,Linux/UNIX用同步方法处理异步信号
一. 前言 Linux/UNIX进程信号处理复杂易出错,而用在多线程中就更加复杂脆弱,这里不探讨相关历史渊源,只给出一种在实践中简单可靠的信号处理方式.后文讨论的线程模型是POSIX thread(p ...
- linux之进程线程信号全解
一.linux进程全解 1.程序的开始结束及预处理atexit函数 main函数由谁调用:其实在裸机程序中c语言运行前是需要一段引导的汇编代码为c语言运行准备环境的如栈,只是在使用编译器开发过程中我们 ...
最新文章
- redis没有加密码导致服务器被当做矿机了
- 一个简单的验证码识别教程
- SAP UI5 sap.ui.core.OpenState.CLOSED Dialog open and close
- eclipse插件安装方法
- Flink开发需要的环境
- 信息系统分析与设计课程心得
- Java基础~Java ASCII码的转换
- docker安装gamit_gamit的安装步骤
- 域名讲解(一)域名基础概念
- windows各类密码搜集
- 学科前沿大作业:区块链技术的相关应用
- php伪装请求ip,php搞定ip伪装的两种方式
- intellij idea 主题设为白色
- 两个long型数据相除结果错误问题解决
- Mongodb学习(1)安装以及配置
- 芯片封装测试流程详解
- Gradle自定义AAR文件名称
- 系统升级 | RK3568开发平台成功搭载SylixOS国产实时操作系统
- Android中Uri和path file三者的相互转换
- 【力学性能预测】材料力学性能预测数据集介绍