我正在为Linux编写系统监视器,并希望包含一些看门狗功能。在内核中,即使关闭/ dev / watchdog,也可以将watchdog配置为继续运行。换句话说,如果守护进程正常退出并关闭/ dev / watchdog,则系统仍会在59秒后重新启动。对于用户而言,这可能是不希望的行为。
我需要让守护程序知道此设置,因为它将影响我处理SIGINT的方式。如果设置为开,则我的守护程序将需要(最好)在退出时启动有序关闭,或(至少)警告用户系统即将重新启动。
有人知道从用户空间获取此设置的方法吗?我在sysconf()中看不到任何值。同样,我需要能够判断是否启用了软件看门狗。
编辑:
Linux提供了非常简单的看门狗界面。进程可以打开/ dev / watchdog,一旦打开设备,内核将开始倒数60秒重新启动,除非将某些数据写入该文件,在这种情况下,时钟将重新设置。]
取决于内核的配置方式,关闭该文件可能会停止倒计时,也可能不会停止倒计时。从文档中:
看门狗可以在没有如果设备导致重启/ dev / watchdog已正确关闭,除非您的内核使用CONFIG_WATCHDOG_NOWAYOUT选项已启用。
我需要能够确定是否在用户空间守护程序中设置了CONFIG_WATCHDOG_NOWAYOUT,以便可以以不同方式处理所述守护程序的关闭。换句话说,如果该设置很高,则简单:
# /etc/init.d/mydaemon stop
...将在59秒内重新引导系统,因为不再有任何内容写入/ dev / watchdog。因此,如果将其设置得很高,我的SIGINT处理程序需要执行其他操作(即,至少警告用户)。
我找不到从用户空间获取此设置的方法:(可以提供任何帮助。
我正在为Linux编写系统监视器,并希望包含一些看门狗功能。在内核中,即使关闭/ dev / watchdog,也可以将watchdog配置为继续运行。换句话说,如果...
啊!深入研究内核的linux/watchdog.h
和drivers/watchdog/softdog.c
之后,我能够确定软狗ioctl()
接口的功能。查看它在struct watchdog_info
中宣布的功能:
监视程序防止由于软件崩溃或硬件故障而导致系统硬锁定。
我认为看门狗设备驱动程序实际上是供嵌入式平台(或至少受良好控制的平台)使用的,开发人员可以控制它们在使用哪个内核。