linux定时器在linux环境中,如何实现多线程中使用多个定时器,POSIX定时器可以吗,如何用?

linux定时器  时间:2021-06-19  阅读:()

linux 定时任务的方法有哪些

如果我们需要定时执行一些周期性重复性的任务,我们就会用到定时执行任务功能来帮我们自动执行每天、每周等周期性重复性的任务而不需要人为干预即可实现。

我们通过crontab –e来创建自己的定时任务,下图中的5个*的含义是,第一个*是分,第二个*是小时,第三个*是日,第4个*是月,第5个*是周,第6列是命令,下图的意思是给所有人发警告信息Hello,每隔一分钟就发送一次Hello信息。

我们可以通过crontab –l来查看当前的已创建的定时任务,可以发现当前有一个定时任务,通过crontab –r删除当前的定时任务,再次通过crontab –l去查看是否还有定时任务,发现已经成功删除了。

进入/etc目录,查看首字母为cron的目录,cron*,*在这里是通配符,匹配任意个字符,通过查看/etc目录下所有与定时任务相关的目录和文件。

通过cat crontab查看定时任务的故事,包括shell的位置、路径、默认邮件发给root账户、以及定时任务的格式,5个*的含义及第6列是写具体的命令。

我们可以看看系统里面的定时任务,有每小时执行的cron.hourly、每日执行的cron.daily、每月执行的cron.monthly、每周执行的cron.weekly.我们通过命令ll cron.daily可以看到里面有很多可执行文件,这些都是系统每天自动执行的定时任务。

我们可以把自己建立的定时文件放在系统已有的目录下,比如每天的定时任务放在cron.daily下面。

系统常用的每天执行的定时任务,tmpwatch定时任务会去/tmp、/var/tmp临时目录下找超过10天的文件并删除,logrotate日志文件回滚,默认是一周回滚一次,1个月回滚4次,也就是日志只保存1个月,logwatch把当天最敏感的日志找出来形成一个电子邮件默认发给超级用户。

linux 加硬件定时器 timer 可否实时

一. Linux的硬件时间 PC机中的时间有三种硬件时钟实现,这三种都是基于晶振产生的方波信号输入。

这三种时钟为:(1)实时时钟RTC ( Real Time Clock)

我在网上搜了一个Linux下的c++定时器,但是不会用。不知道时间在哪设置,定时触发的程序添加到哪请教一下

这里是利用了一个简单定时器…… alarm的参数为秒数,在经过指定秒数后,alarm会发出一个SIGALRM信号 singal函数用来绑定信号处理器函数,这里绑定的是timer,被绑定的函数必须固定为返回值void、参数int。

只需要alarm(时间)就设置了,可能由于getchar需要进入中断导致信号被挂起所以没反应吧,可以试试把getchar换成别的东西来延时看看

在linux环境中,如何实现多线程中使用多个定时器,POSIX定时器可以吗,如何用?

个人解决了,以下是一个实现: #include #include #include #include #include #include #include #if 1 pthread_attr_t attr; timer_t hard_timer, software_timer; struct sigevent hard_evp, software_evp; static void watchdog_hard_timeout(union sigval v) { time_t t; char p[32]; timer_t *q; struct itimerspec ts; int ret; time(&t); strftime(p, sizeof(p), "%T", localtime(&t)); printf("watchdog hard timeout! "); printf("%s thread %d, val = %u, signal captured. ", p, (unsigned int)pthread_self(), v.sival_int); q = (timer_t *)(v.sival_ptr); printf("hard timer_t:%d add:%p, q:%p! ", (int)hard_timer, &hard_timer, q); ts.it__sec = 0; ts.it__nsec = 0; ts.it__sec = 6; ts.it__nsec = 0; ret = timer_settime(*q, CLOCK_REALTIME, &ts, NULL); if (ret != 0) { printf("settime err(%d)! ", ret); } } static void watchdog_software_timeout(union sigval v) { time_t t; char p[32]; timer_t *q; struct itimerspec ts; int ret; time(&t); strftime(p, sizeof(p), "%T", localtime(&t)); printf("watchdog software timeout! "); printf("%s thread %d, val = %u, signal captured. ", p, (unsigned int)pthread_self(), v.sival_int); q = (timer_t *)(v.sival_ptr); printf("hard timer_t:%d add:%p, q:%p! ", (int)hard_timer, &hard_timer, q); ts.it__sec = 0; ts.it__nsec = 0; ts.it__sec = 10; ts.it__nsec = 0; ret = timer_settime(*q, CLOCK_REALTIME, &ts, NULL); if (ret != 0) { printf("settime err(%d)! ", ret); } } static void dcmi_sol_pthread_attr_destroy(pthread_attr_t *attr) { pthread_attr_destroy(attr); } static int dcmi_sol_pthread_attr_init(pthread_attr_t *attr) { int ret; if ((ret = pthread_attr_init(attr) != 0)) { goto err; } if ((ret = pthread_attr_setdetachstate(attr, PTHREAD_CREATE_DETACHED)) != 0) { dcmi_sol_pthread_attr_destroy(attr); goto err; } /* 设置线程的栈大小,失败则用系统默认值 */ pthread_attr_setstacksize(attr, 128 * 1024); return 0; err: printf("set ptread attr failed(ret:%d)! ", ret); return -1; } int main(void) { struct itimerspec ts; int ret; ret = dcmi_sol_pthread_attr_init(&attr); if (ret != 0) { printf("init pthread attributes fail(%d)! ", ret); exit(-1); } memset(&hard_evp, 0, sizeof(struct sigevent)); hard_evp.sigev_value.sival_ptr = &hard_timer; hard_evp.sigev_notify = SIGEV_THREAD; hard_evp.sigev_notify_function = watchdog_hard_timeout; hard_evp.sigev_notify_attributes = NULL;//&attr; memset(&software_evp, 0, sizeof(struct sigevent)); software_evp.sigev_value.sival_ptr = &software_timer; software_evp.sigev_notify = SIGEV_THREAD; software_evp.sigev_notify_function = watchdog_software_timeout; software_evp.sigev_notify_attributes = NULL;//&attr; ret = timer_create(CLOCK_REALTIME, &hard_evp, &hard_timer); if(ret != 0) { perror("hard timer_create fail!"); exit(-1); } ret = timer_create(CLOCK_REALTIME, &software_evp, &software_timer); if (ret != 0) { timer_delete(hard_timer); perror("software timer_create fail!"); exit(-1); } ts.it__sec = 0; ts.it__nsec = 0; ts.it__sec = 6; ts.it__nsec = 0; ret = timer_settime(hard_timer, CLOCK_REALTIME, &ts, NULL); if(ret != 0) { perror("hard timer_settime fail!"); timer_delete(hard_timer); timer_delete(software_timer); exit(-1); } ts.it__sec = 10; ret = timer_settime(software_timer, CLOCK_REALTIME, &ts, NULL); if(ret != 0) { perror("hard timer_settime fail!"); timer_delete(hard_timer); timer_delete(software_timer); exit(-1); } while(1) { printf("main ready sleep! "); sleep(15); printf("main sleep finish! "); } return 0; } #endif

BlueHost 周年庆典 - 美国/香港虚拟主机 美国SSD VPS低至月32元

我们对于BlueHost主机商还是比较熟悉的,早年我们还是全民使用虚拟主机的时候,大部分的外贸主机都会用到BlueHost无限虚拟主机方案,那时候他们商家只有一款虚拟主机方案。目前,商家国际款和国内款是有差异营销的,BlueHost国内有提供香港、美国、印度和欧洲机房。包括有提供虚拟主机、VPS和独立服务器。现在,BlueHost 商家周年活动,全场五折优惠。我们看看这次的活动有哪些值得选择的。 ...

创梦网络-四川一手资源高防大带宽云服务器,物理机租用,机柜资源,自建防火墙,雅安最高单机700G防护,四川联通1G大带宽8.3W/年,无视UDP攻击,免费防CC

? ? ? ?创梦网络怎么样,创梦网络公司位于四川省达州市,属于四川本地企业,资质齐全,IDC/ISP均有,从创梦网络这边租的服务器均可以****,属于一手资源,高防机柜、大带宽、高防IP业务,另外创梦网络近期还会上线四川联通大带宽,四川联通高防IP,一手整CIP段,四川电信,联通高防机柜,CN2专线相关业务。成都优化线路,机柜租用、服务器云服务器租用,适合建站做游戏,不须要在套CDN,全国访问快...

企鹅小屋6折年付240元起,美国CN2 GIA VPS促销,独享CPU,三网回程CN2 GIA

企鹅小屋怎么样?企鹅小屋最近针对自己的美国cn2 gia套餐推出了2个优惠码:月付7折和年付6折,独享CPU,100%性能,三网回程CN2 GIA网络,100Mbps峰值带宽,用完优惠码1G内存套餐是年付240元,线路方面三网回程CN2 GIA。如果新购IP不能正常使用,请在开通时间60分钟内工单VPS技术部门更换正常IP;特价主机不支持退款。点击进入:企鹅小屋官网地址企鹅小屋优惠码:年付6折优惠...

linux定时器为你推荐
windowsmedia为什么打开所有程序都出现Windows Media Player暴力破解rar暴力破解rar,一个15位左右的密码,得用多长时间。(双核。2g内存)comexceptionapro exception是什么意思cursorlocation如何用ENVI把不同图像中的相同地点的某个像素点的值读出来。按时间把这个点的值连起来,。谢谢好人。特斯拉model3降价特斯拉官网为何会被挤崩?泛微协同办公系统泛微OA系统怎么创建新人员空间导航怎么把空间的导航变成只有留言板跟相册particular教程particular的用法backupexec如何在Backup Exec 2012中添加要备份的Windows服务器acceptchangeswinform 怎样把DataTable 中的值插入到数据库中
免费vps服务器 美国vps推荐 google镜像 vultr美国与日本 2014年感恩节 正版win8.1升级win10 evssl 512m内存 数字域名 合租空间 上海联通宽带测速 安徽双线服务器 群英网络 创速 存储服务器 密钥索引 腾讯服务器 accountsuspended 优惠服务器 更多