我想在Linux系统中使用计时器中断来实现软件看门狗定时器。如何在Linux中生成计时器中断?
我想在Linux系统中使用计时器中断来实现软件看门狗定时器。如何在Linux中生成计时器中断?
SIGALRM
。
您可以使用函数alarm()请求超时。如果您想要使用微秒粒度,可以使用ualarm()。
一旦超时到达,它将调用您之前定义的回调函数。#include <signal.h>
void watchdog(int sig)
{
printf("Pet the dog\r\n");
/* reset the timer so we get called again in 5 seconds */
alarm(5);
}
/* start the timer - we want to wake up in 5 seconds */
int main()
{
/* set up our signal handler to catch SIGALRM */
signal(SIGALRM, watchdog);
alarm(5);
while (true)
;
}
您有几种实现看门狗的选项:
应用程序级别不存在中断(只有内核管理它们,并且实际上已经收到了大量的计时器中断)。您可以使用信号、定时器和延迟系统调用(特别是 poll
或 nanosleep
)。阅读 高级 Linux 编程。
首先阅读time(7)手册。然后学习timer_create(2), poll(2), timerfd_create(2), setitimer(2), sigaction(2), nanosleep(2), clock_gettime(2)等相关内容,这些都与编程有关。同时,一些内核也可以配置看门狗定时器...