Linux定时器
1. 睡眠函数
Linux下有两个睡眠函数,
#include <unistd.h>
unsigned int sleep(unsigned int seconds);
int usleep(useconds_t usec);
unsigned int alarm(unsigned int seconds);
1.seconds秒后触发一个SIGALRM信号,具体操作需要在信号处理函数中完成
2.seconds设置为0,则所有正在等待的alarm全部被取消
3.alarm和settimer共享共一个定时器,调用一个会影响到另一个
4.alarm创造的Alarms可以被Execve保留但是不会被fork产生的子进程继承
5.sleep的实现可能会用到SIGALRM,因此混用alarm与sleep会导致错误
2. 时钟处理
+ Linux为每个进程维护3个计时器,分别是,
-
真实计时器 计算程序运行的实际时间 发送SIGALRM 信号
-
虚拟计时器 计算的时程序运行在用户态时所消耗的时间,实际时间减去系统调用和程序睡眠所消耗的时间 发送SIGVTALRAM 信号
-
实用计时器 程序处于用户态和处于内核态所消耗的时间之和 发送SIGPROF信号
用指定的初始间隔和重复间隔时间为进程设定好一个计时器后,该计时器就会定时的向进程发送时钟信号。·
-
函数和数据结构