3

我想在 linux 中使用定时器中断来做软件 wathdog 定时器。如何在 linux 中生成定时器中断?

4

2 回答 2

8

如果您想使用定时器中断,请使用信号,尤其是SIGALRM. 您可以使用函数alarm()请求超时。如果你想要 usec 粒度,你可以使用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) 
   ;
}

您几乎没有其他选项可以实现看门狗:

  1. 编写/使用内核驱动程序,它实际上用作看门狗,如果狗不是宠物(或被踢),则对设备应用硬重置
  2. 使用watchdog,一个有趣的软件看门狗守护程序实现。
于 2013-03-25T06:46:08.393 回答
1

应用程序级别不存在中断(只有内核管理它们,实际上它已经获得了很多定时器中断)。您可以拥有信号、计时器和延迟系统调用(尤其是pollor nanosleep)。阅读高级 Linux 编程

首先阅读time(7)手册页。然后timer_create(2)poll(2)timerfd_create(2)setitimer(2)sigaction(2)nanosleep(2)clock_gettime(2)等......

一些内核也可以配置为具有看门狗定时器......

于 2013-03-25T06:47:26.950 回答