信号之sleep函数
#include <unistd.h> unsigned int sleep(unsigned int seconds); 返回值:0或未休眠够的秒数
此函数使调用进程被挂起,直到满足以下条件之一:
(1)已经过了seconds所指定的墙上时钟时间。
(2)调用进程捕捉到一个信号并从信号处理程序返回。
如果alarm信号一样,由于其他系统活动,实际返回时间比所要求的会迟一些。
在第(1)种情形中,返回值是0。当由于捕捉到某个信号,sleep提早返回时(第(2)种情形),返回值是未睡够的秒数(所要求的时间减去实际休眠的时间)。
尽管sleep可以用alarm函数(http://www.cnblogs.com/nufangrensheng/p/3515013.html)实现,但这并不是必需的。如果使用alarm,则这两个函数之间可能会交互作用。
程序清单10-21 sleep的可靠实现
#include "apue.h"static void sig_alrm(int signo) {/* nothing to do, just returning wakes up sigsuspend() */ }unsigned int sleep(unsigned int nsecs) {struct sigaction newact, oldact;sigset_t newmask, oldmask, suspmask;unsigned int unslept;/* set our handler, save previous information */newact.sa_handler = sig_alrm;sigemptyset(&newact.sa_mask);newact.sa_flags = 0;sigaction(SIGALRM, &newact, &oldact);/* block SIGALRM and save current signal mask */sigemptyset(&newmask);sigaddset(&newmask, SIGALRM);sigprocmask(SIG_BLOCK, &newmask, &oldmask);alarm(nsecs);suspmask = oldmask;sigdelset(&suspmask, SIGALRM); /* make sure SIGALRM isn't blocked */sigsuspend(&suspmask); /* wait for any signal to be caught *//* some signal has been caught, SIGALRM is now blocked */unslept = alarm(0);sigaction(SIGALRM, &oldact, NULL); /* reset previous action *//* reset signal mask, which unblocks SIGALRM */sigprocmask(SIG_SETMASK, &oldmask, NULL);return(unslept); }
本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:http://www.apuebook.com/。
转载于:https://www.cnblogs.com/nufangrensheng/p/3517365.html
信号之sleep函数相关推荐
- Linux 信号signal处理函数--转
alarm(设置信号传送闹钟) 相关函数 signal,sleep 表头文件 #include<unistd.h> 定义函数 unsigned int alarm(unsigned int ...
- _Linux系统编程—信号集操作函数
先来回顾一下未决信号集是怎么回事. 信号从产生到抵达目的地,叫作信号递达.而信号从产生到递达的中间状态,叫作信号的未决状态.产生未决状态的原因有可能是信号受到阻塞了,也就是信号屏蔽字(或称阻塞信号集, ...
- 对信号集操作函数的使用方法和顺序
对信号集操作函数的使用方法和顺序如下: ① 使用signal或sigaction函数安装和登记信号的处理. ② 使用sigemptyset等定义信号集函数完成对信号集的定义. ③ ...
- 2信号处理之:信号产生原因,进程处理信号行为,信号集处理函数,PCB的信号集,sigprocmask()和sigpending(),信号捕捉设定,sigaction,C标准库信号处理函数,可重入函数,
1信号产生原因 2.进程处理信号行为 manpage里信号3中处理方式: SIG_IGN SIG_DFL 默 ...
- QT信号和槽函数学习笔记
//connect 函数有4个参数 分别是 发送者 信号.接受者 ,槽 //connect(sender,signal,receiver,slot) /* * 信号和槽 * 信号 就是一个普通的函数 ...
- Linux信号之signal函数
1. 信号概述 何为信号:信号就是由用户.系统或进程发送给目标进程的信息,以通知目标进程中某个状态的改变或是异常. 信号产生:总体来说,其产生的条件有两种,分别是:硬件和软件原因,又称为:硬中断和软中 ...
- Linux 信号signal处理函数
alarm(设置信号传送闹钟) 相关函数 signal,sleep 表头文件 #include<unistd.h> 定义函数 unsigned int alarm(unsigned int ...
- 信号集操作函数,信号未决、阻塞、递达
转载:信号集操作函数,信号阻塞与未决 一,信号集及相关操作函数 信号集被定义为一种数据类型: typedef struct { unsigned long sig[_NSIG_WORDS]: } si ...
- linux的基础知识——signal信号捕捉,信号集操作函数
文章目录 1.signal捕捉信号 2.信号集操作函数 3.sigprocmask函数 4.sigpending函数 5.例子1:打印某个进程未决信号集 6.例子2:signal函数的注册捕捉执行函数 ...
- Linux系统编程32:进程信号之详解信号集操作函数(sigset_t ,sigpending,sigprocmask)
文章目录 (1)sigset_t (2)信号集操作函数 (1)sigset_t 前面说过,未决和阻塞分别用位图来表示,于是我们把保存位图这样的数据类型称为sigset_t,sigset_t称为信号集, ...
最新文章
- python怎么读取txt文件内容然后保存到excel-Python实现读取txt文件并转换为excel的方法示例...
- ios微信小程序下拉刷新怎么配_为什么他的下拉刷新是个动画效果?
- python3讨论交流地_讨论 - 廖雪峰的官方网站
- linux磁盘使用情况脚本,技术|用 Linux Shell 脚本来监控磁盘使用情况并发送邮件...
- lamba统计最大值,最小值,平均值,总和,个数
- 三星电子第二季芯片需求大增 但手机销售疲软
- 想要在Mac 上运行 Windows 程序 不需要虚拟机也可以
- C++对象模型——关于对象(第一章)
- 全国大学生数学建模竞赛历年赛题及优秀论文(链接见ping论)
- 金山打字通计算机英语,金山打字通英文版
- 手机计算机文件夹加密文件,手机文件夹加密锁软件加密步骤【图文教程】
- “80后”博士,晋升正厅!
- Cannot get a text value from a numeric cell
- [软件人生]写书与程序员
- 用Qt做的拼图小游戏
- R3DS Wrap基本使用方法
- flutter Vertical viewport was given unbounded height
- 小行星轨道 matlab,小行星轨道问题的建模与求解数学建模论文.doc
- 解决Angular Kendo UI 导出PDF中文乱码
- fastreport在delphi中的使用