Linux 软件看门狗 watchdog —— 开门放狗、定期喂狗、狗咬人了

Linux 自带了一个 watchdog 的实现,用于监视系统的运行,包括一个内核 watchdog module 和一个用户空间的 watchdog 程序。

内核 watchdog 模块通过 /dev/watchdog 这个字符设备与用户空间通信。用户空间程序一旦打开 /dev/watchdog 设备(俗称“开门放狗”),就会导致在内核中启动一个1分钟的定时器(系统默认时间),此后,用户空间程序需要保证在1分钟之内向这个设备写入数据(俗称“定期喂狗”),每次写操作会导致重新设定定时器。如果用户空间程序在1分钟之内没有写操作,定时器到期会导致一次系统  reboot 操作(俗称“狗咬人了”)。通过这种机制,我们可以保证系统核心进程大部分时间都处于运行状态,即使特定情形下进程崩溃,因无法正常定时“喂狗”,Linux系统在看门狗作用下重新启动(reboot),核心进程又运行起来了。多用于嵌入式系统。

用户空间程序可通过关闭 /dev/watchdog 来停止内核中的定时器。

打开 /dev/watchdog 设备(“开门放狗”):

int fd_watchdog = open("/dev/watchdog", O_WRONLY);
if(fd_watchdog == -1) {
    int err = errno;
    printf("\n!!! FAILED to open /dev/watchdog, errno: %d, %s\n", err, strerror(err));
    syslog(LOG_WARNING, "FAILED to open /dev/watchdog, errno: %d, %s", err, strerror(err));
}

每隔一段时间向 /dev/watchdog 设备写入数据(“定期喂狗”):

//feed the watchdog
if(fd_watchdog >= 0) {
    static unsigned char food = 0;
    ssize_t eaten = write(fd_watchdog, &food, 1);
    if(eaten != 1) {
        puts("\n!!! FAILED feeding watchdog");
        syslog(LOG_WARNING, "FAILED feeding watchdog");
    }
}

关闭 /dev/watchdog 设备,通常不需要这个步骤:

close(fd_watchdog); 

【转载】http://blog.csdn.net/liigo/article/details/9227205

    http://www.oschina.net/p/watchdog

时间: 2025-01-01 21:03:23

Linux 软件看门狗 watchdog —— 开门放狗、定期喂狗、狗咬人了的相关文章

Linux 软件看门狗 watchdog

Linux 自带了一个 watchdog 的实现,用于监视系统的运行,包括一个内核 watchdog module 和一个用户空间的 watchdog 程序.内核 watchdog 模块通过 /dev/watchdog 这个字符设备与用户空间通信.用户空间程序一旦打开 /dev/watchdog 设备(俗称"开门放狗"),就会导致在内核中启动一个1分钟的定时器(系统默认时间),此后,用户空间程序需要保证在1分钟之内向这个设备写入数据(俗称"定期喂狗"),每次写操作会

Linux 软件看门狗 watchdog 喂狗

Linux 自带了一个 watchdog 的实现,用于监视系统的运行,包括一个内核 watchdog module 和一个用户空间的 watchdog程序.内核 watchdog 模块通过 /dev/watchdog 这个字符设备与用户空间通信.用户空间程序一旦打开 /dev/watchdog 设备(俗称"开门放狗"),就会导致在内核中启动一个1分钟的定时器(系统默认时间),此后,用户空间程序需要保证在1分钟之内向这个设备写入数据(俗称"定期喂狗"),每次写操作会导

树莓派启用看门狗watchdog

树莓派内核默认没有启用看门狗功能,当内核挂死时将进入"死机"状态或kgdb调试状态,并不会自动重启系统.本文为树莓派开启看门狗功能并通过内核线程周期性喂狗,当出现系统崩溃时会自动重启Linux系统. 环境说明:(1)单板:树莓派b (2)Linux内核:Linux-4.1.15 (3)Bootloader:u-boot-2015.10 源码文件:linux-rpi-4.1.y/drivers/watchdog/bcm2835_wdt.c 1.看门狗驱动源码分析 树莓派的看门狗驱动程序为

软件看门狗--别让你地程序无响应(使用未公开API函数IsHungAppWindow,知识点较全)

正文一.概述一些重要的程序,必须让它一直跑着:而且还要时时关心它的状态——不能让它出现死锁现象.当然,如果一个主程序会出现死锁,肯定是设计或者编程上的失误.我们首要做的事是,把这个Bug揪出来.但如果时间紧迫,这个Bug又“飘忽不定”,那么,我们还是先写一个软件“看门狗”,暂时应一下急吧. “看门狗”的需求描述:“看门狗”的运行不出现界面窗口,具有一定的隐蔽性:定时判断目标进程是否运行在当前系统中,如果没有则启动目标进程:判断目标进程是否“没有响应”,如果是则终止目标进程:如果目标进程“没有响应

关于实现一个软件看门狗的计划

由于是软件看门狗,因此他的角色只能算是个辅助工具. 尽管如此,他的功能应该还是有点意义. 此软件的实现计划如下: 1. 软件形式 一个模块soft_wdt.ko,运行在内核中. 2. 软件启动方法 insmod  soft_wdt.ko  dev=/dev/soft_wdt   timeout=5   log=/path/to/log.txt 几个参数分别是:要暴露给用户的设备文件,喂狗时间间隔,日志文件路径 未来可能会支持更多的参数 3. 服务对象 一个个独立的用户态线程. 4. 使用方法 哪

深入浅出~Linux设备驱动之watchdog设备驱动

看门狗(watchdog )分硬件看门狗和软件看门狗.硬件看门狗是利用一个定时器 电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零 (俗称 “喂狗”),如果程序出现故障,不在定时周期内复位看门狗,就使得看门狗定时器溢出产生复位信号 并重启系统.软件看门狗原理上一样,只是将硬件电路上的定时器用处理器的内部定 时器代替. 1 看门狗的三个寄存器 1.1 watchdog原理 S3C2410内部集成了watchdog,提供3 个寄存器对watchdog 进行操作,这3 个寄存器分别

linux入门基础——linux软件管理RPM

因为linux入门基础是基于CentOS讲解的,讲的是CentOS上的软件包管理.ubuntu的软件包管理有这些:ubuntu软件包管理,包管理指南,ubuntu软件包管理. linux软件管理:RPM软件包管理 源代码形式 绝大多数开源软件都是直接以源代码形式发布 源代码一般会被打包成tar.gz的归档压缩文件 程序源代码需要手动编译成二进制形式之后才能够运行使用 源代码基本编译流程: 1 ./configure   检查编译环境.相关库文件以及配置参数并生成makefile 2 make  

我所使用的Linux软件集合

自从2003-2004春节之际初次尝试使用Linux以来,至今已十年有余了.尤其是整个博士研究期间,坚持在Linux下开展学习与研究工作,前前后后试用了不少桌面环境.窗口管理器.终端程序以及其他应用软件.科学软件.一开始这些试探对于学习与熟悉Linux系统是有所帮助的.但是,学习该系统的最终目的还是为了让其为自己的学习与工作服务,发挥出最大的效力,而不是将时间浪费在系统的配置与bug的修正上.因此,对于软件的尝试还是要适可而止.当逐渐形成自己的一套工具软件集合后就要将其固化下来,坚持使用它们并不

linux 软件连接

linux 软件连接 ln -s /www/wdlinux/apache_php-5.2.17/bin/php php linux 软件连接,布布扣,bubuko.com