一、自定义信号集

(1)类型:sigset_t (本质是位图)
(2)设置自定义信号集方法:

 sigset_t set; //创建一个自定义信号集sigemptyset(&set); //创建后,默认是随机数,所以跟着置空func(&set); //设置自定义信号集(func 详见下 5 个函数)

(3)设置自定义信号集函数:5 个

int sigemptyset(sigset_t *set); // 将自定义信号集置空(置 0)// 不阻塞任何信号
int sigfillset(sigset_t *set); // 将自定义信号集置 1 // 阻塞所有信号
int sigaddset(sigset_t *set, int signum); // 将某个信号在自定义信号集置 1
int sigdelset(sigset_t *set, int signum); // 将某个信号在自定义信号集置 0
int sigismember(const sigset_t *set, int signum); // 判断某个信号在集合内是否为 1

二、通过“自定义信号集”设置“阻塞信号集”的函数

通过“自定义信号集”设置“阻塞信号集”的函数:sigprocmask
(1)函数原型:

int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);

(2)参数:
how :如何映射的,有三种
1)SIG_BLOCK :阻塞 ,自定义信号集和阻塞信号集 两个位图取或 。即:某个信号被其中任意一个集合阻塞,最终结果就是阻塞。
2)SIG_UNBLOCK :解除阻塞 ,先查看自定义信号集,记录设置为 1 的位置, 再查看阻塞信号集,对应位置,若是 1,改为 0,若是 0,则不动。
3)SIG_SETMASK :同步 ,自定义信号集覆盖阻塞信号集。
sigset_t *set: 传入参数,传入自定义信号集的地址。
sigset_t *oldest:传出参数,设置之前阻塞信号集状态 不关心,传 NULL。

三、读取当前进程未决信号集

读取当前进程未决信号集:sigpending 函数。
(1)函数原型:

int sigpending(sigset_t *set);

注意:为传出参数,而 set 是位图,无法直接读取,所以常配合 sigismember 使用。
(2)练习:打印当前进程的未决信号集

sigset_t set; // 定义一个信号集,用于存储未决信号集信息
sigpending(&set); // 获得未决信号集信息
for(int i = 1; i < 32; i++) // 循环读取 //注意:信号集编号 1-31
{if( sigismember(&set, i) ) { printf(“1”);
}
else {printf(“0”);
} }

Linux学习之系统编程篇:与信号集有关的函数相关推荐

  1. Linux学习之系统编程篇:信号的基本概念

    一.信号的特点 (1)简单. (2)携带信息量少 . (3)使用在某个特定的场景中(事先约定好). (4)优先级最高. 不建议使用信号进行进程通信因为优先级高会打破原程序的执行过程:能携带的数据过少. ...

  2. Linux学习之系统编程篇:单个线程的退出函数

    能否用 exit 来退出某个线程,exit 是用来退出进程的,因为父子线程共享同一地址空间,如果在某线程中使用,会使 所有线程全退出,因此需要使用别的函数 :pthread_exit (注意:子线程使 ...

  3. Linux学习之系统编程篇:与信号捕捉有关的函数(signal / sigaction)

    一.signal 函数 (1)原型: typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t h ...

  4. Linux学习之系统编程篇: 阻塞信号集、未决信号集、自定义信号集

    阻塞信号集和未决信号集在内核 PCB 中,因此我们无法操作,但是可以操作自定义信号集,然后将其通过函数映射给阻塞信号集来间接操作. 信号集本质:位图(1-31 号)

  5. Linux学习之系统编程篇:利用 SIGCHLD 回收子进程

    子进程死亡会给父进程发送 SIGCHLD 信号!(默认动作:父进程忽略该信号)此时父进程就可以捕捉该信号,利用回调函数使用 waitpid 回收子进程. #include <stdio.h> ...

  6. Linux学习之系统编程篇:与产生信号有关的函数

    一.kill kill : 给指定的进程法信号. (1)头文件: #include <sys/types.h>#include <signal.h> (2)函数原型: int ...

  7. Linux学习之系统编程篇:ps 和 kill 命令以及父子进程间数据共享模式

    一.ps 和 kill 命令 1.ps 命令 常用方式: ps aux :查看正在运行进程信息(主要查 pid). ps ajx :更加详细(PID. PPID:父进程 id. PGID:进程组 id ...

  8. Linux学习之系统编程篇:编写一个守护进程

    需求:写一个守护进程,每隔 2s 获取一次系统时间,将这个时间写入到磁盘文件 #include <stdio.h> #include <stdlib.h> #include & ...

  9. Linux学习之系统编程篇:守护进程(精灵进程、后台进程)

    一.背景 一般情况下,启动终端(shell),系统会创建一个会话(shell 进程是会长),经过后续各种操作,该会话中会存在多个进程组,每个进程组中也会有多个进程(父进程是组长),若此时关闭 shel ...

最新文章

  1. 中国电子信息产业发展研究院主办的2018中国软件大会上大快搜索“又双叒叕”获奖了...
  2. 基础数学:通俗解释,啥叫随机变量?
  3. mysql 创建和删除用户
  4. Java8 CopyOnWriteArrayList 源码分析
  5. iOS编程上获取本地时间以及星期几时间
  6. 国科大prml13-概率图(CRF,HMM)
  7. ora错误匹配java_上周上线碰见的ORA-00054错误回放
  8. Python学习笔记-异常处理
  9. 批量实现 cv2.cvtColor(images, cv2.COLOR_GRAY2RGB)
  10. 2020大一下暑期实习--funcode游戏设计
  11. 计算机考试用户注册,全国计算机等级考试(NCRE)
  12. 微信内置浏览器禁止调整字体大小的方法
  13. javascript事件流的原理
  14. springboot结合注解动态获取数据库表
  15. 07_Python3.6+selenium2.53.6自动化测试_通过id定位百度输入框
  16. 中国哪座城市“最会玩”?“这里是宇宙电竞中心”
  17. [ 数据集 ] COCO 数据集介绍
  18. 程序员为什么不自己单干?
  19. 【Django】开发日报_4_Day:手机号码管理系统-创建项目并实现基本功能
  20. JAVA的类来实现银行账户基本操作

热门文章

  1. 深入浅出线性判别分析(LDA),从理论到代码实现
  2. 小马智行Pony.ai 2020校招宣讲行程来了!
  3. NVIDIA新作解读:用GAN生成前所未有的高清图像(附PyTorch复现) | PaperDaily #15
  4. HDU4809 Wow! Such City! Dijkstra算法
  5. linux获得蓝牙外设mac,iOS获取蓝牙外设Mac地址
  6. Windows 10——连接鼠标时触摸板失效解决方案
  7. JAVA——Java操作MySQL数据库的简单工具类[CLASS:DatabaseUtil]
  8. Computer Game
  9. Sum in the tree
  10. 计算机机房坏境设施演练,计算机机房环境设施应急演练方案