linux系统中定时器使用方法,轻松学会Linux定时器的使用方法

我们知道在Linux中有着定时器这一个功能,通过使用定时器我们能够达到周期性的执行某一任务或者是到了一个指定时间去执行某一个任务的效果。对于Liunx初学者来说可能对此不太熟悉怎么运用,为此在本文中课课家笔者就为大家介绍几种Linux定时器的活用方法,让大家在对此有一个基本的了解。

1f5f5a908719889277f01e9b5edfec28.png

要想使用Linux中的定时器功能,我们可以通过三种方法来实现:

①利用linux内部的三个定时器

②利用sleep, usleep函数让进程睡眠一段时间

③利用gettimeofday, difftime等

①利用linux内部的三个定时器

首先我们先来看看利用linux操作系统为每一个进程提供的3个内部计时器的方法。

ITIMER_REAL: 表示给一个指定的时间间隔,按照实际的时间来减少这个计数,当时间间隔为0的时候发出SIGALRM信号。

ITIMER_VIRTUAL: 表示给定一个时间间隔,当进程执行的时候才减少计数,时间间隔为0的时候发出SIGVTALRM信号。

ITIMER_PROF: 表示给定一个时间间隔,当进程执行或者是系统为进程调度的时候,减少计数,时间到了发出SIGPROF信号,一般这个和ITIMER_VIRTUAL联合,常用来计算系统内核时间和用户时间。

下面是具体用到的函数:

16b0e611de677b8896e533f281a2805a.png

在上述的函数中it_interval用来指定每隔多长时间执行任务, it_value用来保存当前时间离执行任务还有多长时间。举个例子,比如说我们指定it_interval为2秒(微秒为0),开始的时候我们把it_value的时间也设定为2秒(微秒为0),当过了一秒it_value就减少一个为1, 再过1秒则it_value又减少1变为0,这个时候发出信号(告诉用户时间到了可以执行任务了),并且系统自动把it_value的时间重置为it_interval的值,也就是重置为2秒,然后再重新计数。

为了帮助大家更透彻的理解这个问题,笔者再给大家举一个例子:

a0e601128c1039ded5b287ceb2e88f53.png

68b57d28438889d085feb02b18c50829.png

以上程序的ITMER_REAL定时器,每隔2秒钟都会发送一个SIGALRM信号,当主函数接收到了这个信号之后,调用信号处理函数prompt_info在标准错误上输出time is running out这个字符串。对于ITIMER_VIRTUAL和ITIMER_PROF的使用方法其实是相类似的,当我们在setitimer里面设置的定时器为ITIMER_VIRTUAL的时候,只需把sigaction里面的SIGALRM改为SIGVTALarm,同理TIMER_PROF对应为SIGPROF。

②利用sleep, usleep函数让进程睡眠一段时间

接下来我们来看看用sleep以及usleep怎样实现定时执行任务,下面是具体的函数:

f4cf6f119da75e92cfc4ff1019058375.png

通过观察我们不难发现,这个函数要比上面的简单且时间比较准,当指定2秒到了就输出一个字符串。所以如果我们只做一般的定时到了时间去执行一个任务的时候,使用这种方法是最简单便捷的。

③利用gettimeofday, difftime等

最后我们我们来看看通过自己计算时间差的方法来进行定时,具体的函数如下:

c9fd06d6e954a08891067d1ad3cc5af0.png

通过观察我们可以发现这个方法和上面方法的不同之处在于,这是自己手工计算时间差的。如果想更精确的计算时间差,我们可以把time函数换成gettimeofday,这个可以精确到微妙,但由于这种方法效率低所以我们不常用。

以上就是三种利用Linux定时器的方法,具体使用哪一种我们可以根据实际情况来决定。

本次的轻松学会Linux定时器的使用方法的讲解到此就暂告一段落,如果以后有什么相关的内容继续进行补充或者修改的话,笔者会在此继续进行相关的内容的补充或者修改的工作,同时也欢迎大家对本次的讲解提出自己的建议和补充。最后笔者希望本次的讲解对大家学习Linux和Linux认证能够起到一定的帮助作用!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值