Linux中的看门狗定时器

WatchDog Timer In Linux

本文关键字:定时器 看门狗 Linux      更新时间:2023-10-16

我想在linux中使用定时器中断做软件看门狗定时器。如何在linux系统中生成定时器中断?

如果您想使用定时器中断,请使用信号,特别是SIGALRM。您可以使用alarm()函数来请求超时。如果你想使用粒度,你可以使用ualarm()。一旦到达超时时间,它将调用您之前定义的回调函数。

下面是一个示例代码:

#include <signal.h>
void watchdog(int sig) 
{
  printf("Pet the dogrn");
  /* 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. 使用一个看门狗,一个有趣的软件看门狗守护进程的实现。

中断在应用程序级别不存在(只有内核管理它们,实际上它已经得到了很多定时器中断)。您可以使用信号、计时器和延迟系统调用(特别是pollnanosleep)。阅读Advanced Linux Programming.

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