我想在 linux 中使用定时器中断来做软件 wathdog 定时器。如何在 linux 中生成定时器中断?
问问题
6888 次
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)
;
}
您几乎没有其他选项可以实现看门狗:
- 编写/使用内核驱动程序,它实际上用作看门狗,如果狗不是宠物(或被踢),则对设备应用硬重置
- 使用watchdog,一个有趣的软件看门狗守护程序实现。
于 2013-03-25T06:46:08.393 回答
1
应用程序级别不存在中断(只有内核管理它们,实际上它已经获得了很多定时器中断)。您可以拥有信号、计时器和延迟系统调用(尤其是poll
or 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 回答