sigprocmask, sigpending, sigsuspend的用法
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的用法相关推荐
- sigprocmask和sigsuspend转
有2个函数 sigprocmask和sigsuspend sigprocmask系统调用用于改变当前阻塞信号集,比如进程想阻塞SIGMIN+1信号.就把这个信号加入掩码中,然后调用 sigprocma ...
- sigprocmask , sigpending 和 sigsuspend函数
sigprocmask函数: 功能描述: 设定对信号屏蔽集内的信号的处理方式(阻塞或不阻塞). 用法: #include <signal.h> int sigprocmask(int ho ...
- pause()与sigsuspend()的用法
一.pause函数: 功能:让进程暂停直到信号出现 #include<unistd.h> intpause(); 函数说明:pause()会令目前的进程暂停(进入睡眠状态),直至信号(si ...
- linux 信号集 同步,linux信号集
信号集给我们提供了一个能表示多个信号的是数据类型(sigset_t), 它将在sigprocmask, sigpending, sigsuspend之类的函数中用到, 这些函数我会在以后的文章中介绍. ...
- linux相关函数,linux相关常用函数参考
加入相关头文件,编译的时候可能还需要指定加入相关的库 1.isalnum 测试字符是否为英文或数字相关函数:isalpha,isdigit,islower,isupper 2.isalpha 测试字符 ...
- 64位 atol c linux_Linux_C函数参考
1.isalnum 测试字符是否为英文或数字 相关函数:isalpha,isdigit,islower,isupper 2.isalpha 测试字符是否为英文字母 相关函数:isalnum,isl ...
- Linux学习笔记22——sigsuspend 让指定的信号无法唤醒进程
1,由来 让指定的信号无法唤醒进程貌似很简单,只要先设置屏蔽字屏蔽指定的信号,再pause就可以了.以后只要接收到信号,切该信号不是指定的信号就可以结束 pause.但是,这种做法是分两步做的,而信号 ...
- Linux C编程--进程间通信(IPC)3--信号集和发送信号介绍
Linux信号集 1.信号集概念 信号集是一个能表示多个信号的数据类型,sigset_t set :set即一个信号集. 既然是一个集合,就需要对集合进行添加/删除等操作. int sigemptys ...
- linux常用c函数(中文版)
都是linux的c函数东西略多,用页面搜索来查找吧. << Back to man.ChinaUnix.net isalnum(测试字符是否为英文或数字) 相关函数 isalpha,isd ...
最新文章
- linux文件编辑操作,Linux下文本编辑及其文件操作
- NOIP2018 集训(一)
- 分析攻击IP来源地并画出饼图
- CCF 201312-4 有趣的数
- 程序员面试金典 - 面试题 16.07. 最大数值(位运算求max)
- RedissonClient 缓存Bug
- SQL Server中的执行计划
- 品高打造西科大教育云,带你看懂高教云建设之路
- GHOST镜像导入VHD的虚拟机
- Zip 命令打包移除多余隐藏文件
- 【毕设】requests+bs4+re 爬取知网文献来源的信息
- 分享一个经验模态分解分解视频,讲的超好
- Tokio教程之深入异步
- 20sccm_SCCM 完全手册
- PX4 FMU启动流程 2. 一、 nsh_newconsole
- 计算机等级打印,全国计算机等级考试试题PDF打印(13页)-原创力文档
- el表达式ne什么意思_el表达式中的比较eq ne gt lt
- 【保姆级】lookup-method标签实践与分析
- 公开课 | 解密HW究竟怎么玩?之 第一篇
- 计算机主机时间不保存,电脑主机不能保存时间怎么办?
热门文章
- mysql 语句检查_mysql查询语句
- 物理搬砖问题_全职业通用,搬砖市场装备
- 文件的记录c语言程序,c语言程序学生籍贯信息记录簿设计.docx
- 计算机进制简称,NO.A.0007——二进制;计算机容量单位B、KB、MB、GB和TB关系
- 西门子逻辑运算指令_西门子S7-200 SMART逻辑运算指令应用实例
- python 异常处理 变量_Python基础入门:从变量到异常处理
- android 电池高温关机,Android 关机问题分析指南
- 语言nomogram校准曲线图_预测模型的概率校准
- Eclipse 答疑:为什么 Eclipse 里面的鼠标光标变成了小黑方块?什么原因导致的?
- 《软件需求分析(第二版)》第 11 章——一图胜千言 重点部分总结