最近可能有的读者比较迷茫。在linux下开发时,经常会遇到一些场景,比如:如何让程序运行特定时间后退出?如何在循环中一定时间后自动执行某个程序,比如判断孩子打开了游戏,运行5分钟后自动执行退出脚本?这就涉及到中断和定时器的知识。通常在linux中我们可以使用下面两个定时器函数来完成报警函数所需的头文件代码#include原型:unsignedintalarm(unsignedintseconds)报警函数发送一个SIGALRM中断,通过信号函数捕获和过程。下面是配合信号函数#include#include#include#includeintflag=0;intmain(void){/*lambda表达式很简单定义一个中断处理程序*/autobb=[](intsig)->void{printf("alarm!\n");标志=1;返回;};信号(SIGALRM,bb);//注册捕获信号函数,由bbalarm(1)处理;while(1){if(flag==1){printf("hhh\n");返回0;}}return0;}【参考:https://linuxhint.com/sigalar...】上面的例子中,等待2秒后循环自动结束,就是这个功能的实现。但是alarm功能的一个进程只能有一个固定的(timer)定时器,这对多线程和异步程序特别不友好,同时使用会出现冲突和安全问题。在bb函数中加入alarm(k)可以实现重复发送的功能。但是每次alarm发出的SIGALRM中断都会调用bb函数,在不同的线程中是不会区分的。而且只能以秒为单位,有比较大的局限性。setitimer()setitimer()是Linux的API,不是C语言的标准库。setitimer()有两个功能。一种是在指定的时间段后执行某个功能,另一种是在某个时间段后执行某个功能。函数,下面程序演示如何使用setitimer()。定义:#includeintsetitimer(intwhich,conststructitimerval*value,structitimerval*ovalue);ITIMER_REAL:以系统实时计算,发送SIGALRM信号。ITIMER_VIRTUAL:根据进程在用户态所花费的时间来计算,它发送一个SIGVTALRM信号。ITIMER_PROF:根据进程在用户态和内核态所花费的时间来计算,它发送一个SIGPROF信号。下面是一个例子报警!\n");返回;};信号(SIGALRM,bb);结构itimervalnew_one,old_one;/************************************************************//*tv_sec+tv_usec*1/1e6=重复间隔时间it_interval为0,会一直延迟*/new_one.it_interval.tv_sec=0;new_one.it_interval.tv_usec=3e5;//value<1e6/*同样,初始执行时间*/new_one.it_value.tv_sec=1;new_one.it_value.tv_usec=0;//值<1e6setitimer(ITIMER_REAL,&new_one,&old_one);//old_one不需要赋值for(;;);printf("1122\n");return0;}后记:有没有其他的实现方式,有什么注意事项吗?基本原理是什么?以后有机会继续挖掘。