设为首页 加入收藏

TOP

Linux进程的计时器和间隔计时器
2014-11-24 11:33:28 来源: 作者: 【 】 浏览:0
Tags:Linux 进程 计时器 间隔

比较常用的时间控制函数就是sleep();让我们当前的进程休眠指定的秒数。


系统中的每个进程都有一个私有的闹钟。这个闹钟很像一个计时器,可以设置在一定秒数后的闹钟。 时间一到,时钟就发送一个信号SIGALRM到进程。除非为SIGALRM设置了处理函数,否则信号将杀死这个进程。sleep函数由3个步骤组成:


1.为SIGALRM设置一个处理函数;


2.调用alarm(num_seconds);


3.调用pause。


系统调用pause挂起进程直到信号到达。任何信号都可以唤醒进程,而非仅仅等待SIGALRM。



进程的三种计时器: 真实、进程和实用


1.ITIMER_REAL : 这个计时器计量真实的时间,无论进程在用户态还是核心态用了多少处理器时间它都记录。当这个计时器用尽,发送SIGALRM消息。


2.ITMER_VIRTUAL: 只有进程在用户态运行时才计时。当虚拟计时器用尽时,发送SIGVTALRM消息。这个时间30s比真实时间30s长。


3.ITIMER_PROF: 这个计时器在进程运行于用户态或由该进程调用而陷入核心态时计时。当这个计时器用尽,发送SIGPROF信号。




在程序中使用间隔计时器要稍微复杂一点,要选择计时器的类型,然后需要选择初始间隔和重复间隔,还要设置在struct itimerval中的值,然后将这个结构体通过调用setitimer传给计时器。为了读取计时器设置,使用getitimer。



进入死循环后,调用pause。大约每500us,控制跳转到countdown函数。当num到0时,调用exit结束。


struct itimeal的结构如下:



内核在每个时钟脉冲时,遍历所有的间隔计时器,使用这样的手段来管理每个进程的真实计时器。而其他两个计时器,在程序运行的特定时刻进行计时。通过这样的机制,来实现每个进程三个计时器的管理。我们通过setitimer系统调用,得到了更高的精度控制计时器,同时能够以固定的时间间隔发送信号。当然了,这个时间全可以随时修改的,在中断中改变一下,就可以了。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇android.view.WindowLeaked报错的.. 下一篇md5加密C语言实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python爬虫教程(从 (2025-12-26 16:49:14)
·【全269集】B站最详 (2025-12-26 16:49:11)
·Python爬虫详解:原 (2025-12-26 16:49:09)
·Spring Boot Java: (2025-12-26 16:20:19)
·Spring BootでHello (2025-12-26 16:20:15)