sigset_t set

sigemptyset(&set) :清空阻塞信号集合变量

sigfillset(&set) :添加所有的信号到阻塞集合变量里

sigaddset(&set,SIGINT):添加单一信号到阻塞信号集合变量

sigdelset(&set,SIGINT):从阻塞信号集合变量中删除单一信号

void handler(int sig)    //信号处理函数的实现

{

printf("SIGINT sig");

}

功能:返回在阻塞期间接收到阻塞信号的集合。

{
        sigset_t set;             //定义阻塞信号集的变量
        sigemptyset(&set);        //清空变量set的阻塞信号
        sigaddset(&set,SIGINT);   //添加将要阻塞的信号"SIGINT"到阻塞信号集变量
        sigdelset(&set,SIGINT);   //从已有的阻塞信号集变量中删除阻塞信号"SIGINT"
        sigaddset(&set,SIGQUIT);  //添加将要阻塞的信号"SIGQUIT"到阻塞信号集变量
        sigprocmask(SIG_SETMASK,&set,NULL);// 将当前的阻塞信号集合变量set设置为该进程信号阻塞列表
        while(1);                 //
        return 0;
}

sigpending 函数:

printf( "set is %8.8ld.\n", set );

sigpending( &pset );
    printf( "Pending set is %8.8ld.\n", pset );

kill( getpid(), SIGINT );
    sigpending( &pset );
    printf( "Pending set is %8.8ld.\n", pset );

kill( getpid(), SIGQUIT );
    sigpending( &pset );
    printf( "Pending set is %8.8ld.\n", pset );

sigsuspend函数(感觉场景不太普遍)

功能:它有一套属于自己的屏蔽信号mask,能够选择性接收某些信号。在接收到可行信号(也即是没有被屏蔽的信号)之前,运行到它时,它会一直悬挂着,有点类似pause()函数。接受到可行信号后,它会退出悬挂并执行相应的信号函数。接收到的信号源:1.之前运行sigprocmask()函数中阻塞的信号;2.悬挂后接受到的信号。

sigsuspend的整个原子操作过程为:
(1) 设置新的mask阻塞当前进程;
(2) 收到信号,恢复原先mask;
(3) 调用该进程设置的信号处理函数;
(4) 待信号处理函数返回后,sigsuspend返回。

sleep也是用sigsuspend实现的。

http://blog.csdn.net/elbort/article/details/7594772

http://blog.csdn.net/todd911/article/details/17319591

sigprocmask, sigpending, sigsuspend的用法相关推荐

  1. sigprocmask和sigsuspend转

    有2个函数 sigprocmask和sigsuspend sigprocmask系统调用用于改变当前阻塞信号集,比如进程想阻塞SIGMIN+1信号.就把这个信号加入掩码中,然后调用 sigprocma ...

  2. sigprocmask , sigpending 和 sigsuspend函数

    sigprocmask函数: 功能描述: 设定对信号屏蔽集内的信号的处理方式(阻塞或不阻塞). 用法: #include <signal.h> int sigprocmask(int ho ...

  3. pause()与sigsuspend()的用法

    一.pause函数: 功能:让进程暂停直到信号出现 #include<unistd.h> intpause(); 函数说明:pause()会令目前的进程暂停(进入睡眠状态),直至信号(si ...

  4. linux 信号集 同步,linux信号集

    信号集给我们提供了一个能表示多个信号的是数据类型(sigset_t), 它将在sigprocmask, sigpending, sigsuspend之类的函数中用到, 这些函数我会在以后的文章中介绍. ...

  5. linux相关函数,linux相关常用函数参考

    加入相关头文件,编译的时候可能还需要指定加入相关的库 1.isalnum 测试字符是否为英文或数字相关函数:isalpha,isdigit,islower,isupper 2.isalpha 测试字符 ...

  6. 64位 atol c linux_Linux_C函数参考

    1.isalnum 测试字符是否为英文或数字 相关函数:isalpha,isdigit,islower,isupper 2.isalpha 测试字符是否为英文字母   相关函数:isalnum,isl ...

  7. Linux学习笔记22——sigsuspend 让指定的信号无法唤醒进程

    1,由来 让指定的信号无法唤醒进程貌似很简单,只要先设置屏蔽字屏蔽指定的信号,再pause就可以了.以后只要接收到信号,切该信号不是指定的信号就可以结束 pause.但是,这种做法是分两步做的,而信号 ...

  8. Linux C编程--进程间通信(IPC)3--信号集和发送信号介绍

    Linux信号集 1.信号集概念 信号集是一个能表示多个信号的数据类型,sigset_t set :set即一个信号集. 既然是一个集合,就需要对集合进行添加/删除等操作. int sigemptys ...

  9. linux常用c函数(中文版)

    都是linux的c函数东西略多,用页面搜索来查找吧. << Back to man.ChinaUnix.net isalnum(测试字符是否为英文或数字) 相关函数 isalpha,isd ...

最新文章

  1. linux文件编辑操作,Linux下文本编辑及其文件操作
  2. NOIP2018 集训(一)
  3. 分析攻击IP来源地并画出饼图
  4. CCF 201312-4 有趣的数
  5. 程序员面试金典 - 面试题 16.07. 最大数值(位运算求max)
  6. RedissonClient 缓存Bug
  7. SQL Server中的执行计划
  8. 品高打造西科大教育云,带你看懂高教云建设之路
  9. GHOST镜像导入VHD的虚拟机
  10. Zip 命令打包移除多余隐藏文件
  11. 【毕设】requests+bs4+re 爬取知网文献来源的信息
  12. 分享一个经验模态分解分解视频,讲的超好
  13. Tokio教程之深入异步
  14. 20sccm_SCCM 完全手册
  15. PX4 FMU启动流程 2. 一、 nsh_newconsole
  16. 计算机等级打印,全国计算机等级考试试题PDF打印(13页)-原创力文档
  17. el表达式ne什么意思_el表达式中的比较eq ne gt lt
  18. 【保姆级】lookup-method标签实践与分析
  19. 公开课 | 解密HW究竟怎么玩?之 第一篇
  20. 计算机主机时间不保存,电脑主机不能保存时间怎么办?

热门文章

  1. mysql 语句检查_mysql查询语句
  2. 物理搬砖问题_全职业通用,搬砖市场装备
  3. 文件的记录c语言程序,c语言程序学生籍贯信息记录簿设计.docx
  4. 计算机进制简称,NO.A.0007——二进制;计算机容量单位B、KB、MB、GB和TB关系
  5. 西门子逻辑运算指令_西门子S7-200 SMART逻辑运算指令应用实例
  6. python 异常处理 变量_Python基础入门:从变量到异常处理
  7. android 电池高温关机,Android 关机问题分析指南
  8. 语言nomogram校准曲线图_预测模型的概率校准
  9. Eclipse 答疑:为什么 Eclipse 里面的鼠标光标变成了小黑方块?什么原因导致的?
  10. 《软件需求分析(第二版)》第 11 章——一图胜千言 重点部分总结