Linux signal与定时器
1. signal
sighandler_t signal(int signum, sighandler_t handler);
signum:是一个信号。除了SIGKILL和SIGSTOP外的任何一种信号
handler:
- 无返回值的函数地址
- SIG_IGN:忽略参数signum所指的信号
- SIG_DFL:恢复系统对信号的默认处理
注:当一个信号的信号处理函数执行时,如果进程又接收到了该信号,该信号会自动被储存而不会中断信号处理函数的执行,直到信号处理函数执行完毕再重新调用相应的处理函数。但是如果在信号处理函数执行时进程收到了其它类型的信号,该函数的执行就会被中断
查看64信号:
kill -l
2. kill
int kill(pid_t pid, int sig);
- 如果参数pid是正数,那么该调用将信号sig发送到进程号为pid的进程
- 如果pid等于0,那么信号sig将发送给当前进程所属进程组里的所有进程
- 如果参数pid等于-1,信号sig将发送给除了进程1和自身以外的所有进程
- 如果参数pid小于-1,信号sig将发送给属于进程组-pid的所有进程
- 如果参数sig为0,将不发送信号
3. pause
int pause(void);
当前的进程暂停(进入睡眠状态),直到被信号(signal)所中断
4. alarm
unsigned int alarm(unsigned int seconds);
说明:后一次设定将取消前一次的设定
注:一个进程只能有一个闹钟时间,如果在调用alarm之前已设置过闹钟时间,则任何以前的闹钟时间都被新值所代替
返回值:返回上一个闹钟时间的剩余时间,否则返回0
信号:SIGALRM
5. setitimer
要求不太精确的话,使用alarm()和signal()就行了,但是如果想要实现精度较高的定时功能的话,就要使用setitimer函数
int getitimer(int which, struct itimerval *curr_value);
int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);
struct itimerval
{
struct timeval it_interval; //下一次的取值
struct timeval it_value; //本次的设定值
};
struct timeval
{
long tv_sec; //秒
long tv_usec; //微秒,1秒 = 1000000 微秒
};
which:
- ITIMER_REAL: 以系统真实的时间来计算,它送出SIGALRM信号
- ITIMER_VIRTUAL: -以该进程在用户态下花费的时间来计算,它送出SIGVTALRM信号
- ITIMER_PROF: 以该进程在用户态下和内核态下所费的时间来计算,它送出SIGPROF信号
it_interval:指定间隔时间
it_value:指定初始定时时间
- 如果只指定it_value,就是实现一次定时
- 如果同时指定 it_interval,则超时后,系统会重新初始化it_value为it_interval,实现重复定时
- 两者都清零,则会清除定时器
tv_sec:提供秒级精度
tv_usec:提供微秒级精度,以值大的为先
old_value:用来保存先前的值,常设为NULL
Linux signal与定时器的更多相关文章
- Linux下的定时器:alarm()与setitimer()
Linux下的定时器有两种,以下分别介绍: 1.alarm 如果不要求很精确的话,用alarm()和signal()就够了 unsigned int alarm(unsigned int second ...
- linux c语言定时器
原文来自于:http://hi.baidu.com/opetrhsxszbckzd/item/126966cae5f9524aa9ba94f5 我只是把其重新排版标注一下. linux c语言定时器 ...
- Linux使用一个定时器实现设置任意数量定时器功能【转】
转自:https://www.jb51.net/article/120748.htm 为什么需要这个功能,因为大多数计算机软件时钟系统通常只能有一个时钟触发一次中断.当运行多个任务时,我们会想要多个定 ...
- Linux应用层的定时器Timer使用详解【转】
转自:http://blog.csdn.net/wwwtovvv/article/details/8601528 版权声明:本文为博主原创文章,未经博主允许不得转载. linux下定时器的使用 -- ...
- linux signal 处理
v/:* {behavior:url(#default#VML);} o/:* {behavior:url(#default#VML);} w/:* {behavior:url(#default#VM ...
- linux signal之初学篇
前言 本博文只总结signal的应用,对signal的kernel实现暂不讨论. 1. linux signal是什么? signal是linux提供的用于进程间通信的一种IPC机制. 2. 如何发送 ...
- <摘录>linux signal 列表
Linux 信号表 Linux支持POSIX标准信号和实时信号.下面给出Linux Signal的简表,详细细节可以查看man 7 signal. 默认动作的含义如下: 中止进程(Term) 忽略 ...
- linux signal 列表
Linux 信号表 Linux支持POSIX标准信号和实时信号.下面给出Linux Signal的简表,详细细节可以查看man 7 signal. 默认动作的含义如下: Term 终止进程 ...
- linux signal 用法和注意事项
http://blog.chinaunix.net/uid-9354-id-2425031.html 所以希望能用相同方式处理信号的多次出现,最好用sigaction.信号只出现并处理一次,可以用si ...
随机推荐
- Android框架之EventBus的使用
简介 EventBus是由greenrobot组织贡献的一个Android事件发布/订阅的轻量级框架.EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用 ...
- python基础-TCP协议和UDP协议
TCP协议是一种流式协议,UDP协议是一种数据包协议. TCP和UDP是OSI模型中传输层的协议.TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输. TCP和UDP区别总 ...
- oracle 死锁 锁
[zhuan]今天看群里在讨论数据库死锁的问题,也一起研究了下,查了些资料在这里总结下. 所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将 ...
- js 常用工具方法
1.格式化字符串 String.prototype.format = function () { let args = arguments; return this.replace(/\{(\d+)\ ...
- 更改docker默认网段
#本文档旨在说明创建docker时注意的事项:我们在局域网中使用Docker,最常遇到的一个困惑,就是有时候跨网段结果出现网络不通.原因是因为Docker默认生成的网关和我们的局域网网段有时候是冲突的 ...
- RAID10(5块硬盘)的简介和创建
一. RAID10简介 (1)兼具速度和安全性,但成本很高. (2)继承了RAID0的快速与RAID1的安全,RAID1在这里提供了冗余备份的阵列,而RAID0则负责数据的读写阵列.因这 ...
- 第十一周小组Scrum会议
会议照片 本周会议内 回顾上一周的内容 总结上一轮的得失: 我们在第一轮中,并没有做出什么东西,为此我们痛定思痛,制定了计划,确定第二轮迭代的目标: 1. 实现小程序与后台代码的交互 2. 将检索书籍 ...
- 鲜贝7.3--mysql安装
1.安装包下载 首先是下载 mysql-installer-community-5.6.14.0.msi ,大家可以到 mysql 官方网去下载. win10的安全机制比较严格,安装前最好到<设 ...
- Jsoup+HttpUnit爬取搜狐新闻
怎么说呢,静态的页面,但我也写了动态的接口支持,方便后续爬取别的新闻网站使用. 一个接口,接口有一个抽象方法pullNews用于拉新闻,有一个默认方法用于获取新闻首页: public interfac ...
- luoguP2048 [NOI2010]超级钢琴
upd 2019.12.10 latex和markdown化 题意 解析: 先考虑暴力:将每个区间求出来,放进一个堆里,取出前k个就是答案. 期望得分:20,原因:TLE code(对,我真写了): ...