1.相关函数

NAMEsigemptyset,  sigfillset, sigaddset, sigdelset, sigismember - POSIX signal set opera‐tions.SYNOPSIS#include <signal.h>int sigemptyset(sigset_t *set);int sigfillset(sigset_t *set);int sigaddset(sigset_t *set, int signum);int sigdelset(sigset_t *set, int signum);int sigismember(const sigset_t *set, int signum);
DESCRIPTIONThese functions allow the manipulation of POSIX signal sets.sigemptyset() initializes the signal set given by set  to  empty,  with  all  signals excluded from the set.sigfillset() initializes set to full, including all signals.sigaddset() and sigdelset() add and delete respectively signal signum from set.sigismember() tests whether signum is a member of set.

①所有的应用程序在使用信号集之前,都必须先调用sigemptyset/sigfillset一次
②一旦已经初始化了一个信号集,那么就可以对该信号集进行添加和删除信号的操作

2.sigprocmask

NAMEsigprocmask - examine and change blocked signalsSYNOPSIS#include <signal.h>int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
The behavior of the call is dependent on the value of how, as follows.SIG_BLOCKThe  set  of blocked signals is the union of the current set andthe set argu‐ment.SIG_UNBLOCKThe signals in set are removed from the current set of blocked
signals.  It is  permissible to attempt to unblock a signalwhich is not blocked.SIG_SETMASKThe set of blocked signals is set to the argument set.If oldset is non-NULL, the previous value of the signal mask is
stored in oldset.If  set  is  NULL,  then the signal mask is unchanged
(i.e., how is ignored), but the current value of the signal maskis nevertheless returned in oldset  (if  it  is  not NULL).

3.一个demo

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>void Handler(int n)
{write(1, "!", 1);
}int main()
{int i;sigset_t set;//信号集//都必须先进行置空操作sigemptyset(&set);//加入INT这个信号sigaddset(&set, SIGINT);//设置该信号的行为signal(SIGINT, Handler);while(1){//将该信号集中的信号进行阻塞sigprocmask(SIG_BLOCK, &set, NULL);for(i = 0; i < 5; i++){write(1, "*", 1);sleep(1);}write(1, "\n", 1);//不阻塞信号集中的信号sigprocmask(SIG_UNBLOCK, &set, NULL);}return 0;
}


多个信号为什么会丢失,前面我已经解释过了,简单来说他就表现在位图上

4.sigsetjmp sigsetlongjmp

int sigsetjmp(sigjmp_buf env, int savesigs);sigsetjmp() is similar to setjmp().  If,  and  only  if,
savesigs  is  nonzero,  the process's current signal mask is saved
in env and will be restored if a siglongjmp(3) is later performed
with this env.

它可以保存你的mask位图

void siglongjmp(sigjmp_buf env, int val);POSIX does not specify  whether  longjmp()  will  restore  the
signal  context  (see setjmp(3)  for  some  more details). If you want to portably save and restore signal  masks, use sigsetjmp(3) and siglongjmp().

跳转同时恢复你得mask位图

信号集 信号屏蔽字/pending的处理相关推荐

  1. 2信号处理之:信号产生原因,进程处理信号行为,信号集处理函数,PCB的信号集,sigprocmask()和sigpending(),信号捕捉设定,sigaction,C标准库信号处理函数,可重入函数,

     1信号产生原因 2.进程处理信号行为 manpage里信号3中处理方式: SIG_IGN SIG_DFL                                            默 ...

  2. 【Linux系统编程学习】信号、信号集以其相关函数

    此为牛客Linux C++和黑马Linux系统编程课程笔记. 文章目录 0. 信号的概念 1. Linux信号一览表 2. 信号相关函数 3. kill函数 4. raise函数 5. abort函数 ...

  3. qwidget show 是否有信号_c++笔记(信号集处理函数)

    信号集 在PCB中有两个非常重要的信号集.一个称为 阻塞信号集, 一个称为 未决信号集 这两个信号集都是内核使用位图机制来实现的.但操作系统不充许我们直接对其操作,而需自定义另外一个集合,借助信号操作 ...

  4. linux设置子线程的信号屏蔽器,[转载]linux信号屏蔽字

    1. 概念: 信号屏蔽字就是进程中被阻塞的信号集, 这些信号不能发送给该进程, 它们在该进程中被"屏蔽"了. 后面我们会提到, 实际上它们是被阻塞了. 2. 信号屏蔽函数: #in ...

  5. 【B站视频笔记】linux 进程间通信(ipc)信号(软中断信号)signal库函数、可靠信号和不可靠信号、信号集sigprocmask(信号掩码、信号递达Delivery、信号未决Pending)

    [视频教程]Linux信号详解(可靠信号.不可靠信号.阻塞信号.信号处理函数) [博文]Linux信号 文章目录 背景 课程笔记 一.如何让程序在后台运行 1.加"&"符号 ...

  6. Linux系统编程----7(信号集,信号屏蔽,信号捕捉)

    信号集操作函数 内核通过读取未决信号集来判断信号是否应被处理.信号屏蔽字 mask 可以影响未决信号集.而我们可以在应 用程序中自定义 set 来改变 mask.已达到屏蔽指定信号的目的. 信号集设定 ...

  7. 信号的用法,signal函数、sigaction函数及信号集(sigemptyset,sigaddset)操作函数

    信号是与一定的进程相联系的.也就是说,一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如,一个进程可以忽略某些信号而只处理其他一些信号:另外,一个进程还可以选择如何处理信号.总之,这些总与特定 ...

  8. linux中signal函数返回值,signal函数、sigaction函数及信号集操作函数

    信号是与一定的进程相联系的.也就是说一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如一个进程可以忽略某些信号而只处理其他一些信号另外一个进程还可以选择如何处理信号.总之这些总与特定的进程相联 ...

  9. 概念篇——信号与信号集

    说明:   本文章旨在总结备份.方便以后查询,由于是个人总结,如有不对,欢迎指正:另外,内容大部分来自网络.书籍.和各类手册,如若侵权请告知,马上删帖致歉.   QQ 群 号:513683159 [相 ...

  10. Linux信号 五 信号挂起与信号掩码操作接口集

    A signal may be blocked, which means that it will not be delivered until it is later unblocked. Betw ...

最新文章

  1. vs2008与IIS 7.0使用在vista上时出现的问题及解决方法(Internet Explorer 无法显示该页面)(VS2008: IE Cannot Display Web Page)...
  2. 程序员花名大 PK | 每日趣闻
  3. yii2使用select2
  4. 《Office 365 开发入门指南》
  5. STM32F1笔记(七)WWDG窗口看门狗
  6. fft matlab 区别,Matlab中fft与fwelch有什么区别?如何用fft求功率谱?
  7. 如何在Eclipse上使用SVN,安装、提交、拉取代码、解决冲突等操作
  8. 极客技术专题【003期】:java mvc 增删改查 自动生成工具来袭
  9. Quartz的job中注入的services接口为空的解决办法
  10. java 单例模式(饿汉模式和懒汉模式)
  11. ASCll码字符对照表
  12. 除了定时器,真的没法在Simulation Node 类型的CAPL节点中实现延时了吗?
  13. CXF框架介绍及Spring集成
  14. 海量数据的常见处理算法
  15. Unity - Timeline 之 Timeline window(Timeline窗口)
  16. 朋友之间最舒服的关系
  17. oracle中vim设置行号,vim的常用操作
  18. 不管计算机专业大学生还是职场老手,除了代码之外程序员必备的软技能有哪些?
  19. 《城市化》(顾朝林)-重要术语
  20. 小米删除了文件无网络无服务器,小米手机里的文件删了怎么恢复?超详细解决方法...

热门文章

  1. springSecurity jwt 如何融合
  2. 数据结构11——KMP
  3. [安卓历险记] Error when loading the SDK
  4. [!] Unable to satisfy the following requirements:
  5. 同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式
  6. Mac OSX用终端检测文件的sha1值
  7. Java并发(基础知识)—— 创建、运行以及停止一个线程
  8. (栈)栈 给定push序列,判断给定序列是否是pop序列
  9. 【1131】C/C++经典程序训练1---最大公约数与最小公倍数
  10. Render OpenCascade Geometry Curves in OpenSceneGraph