我正在为 Linux 编写系统监视器,并希望包含一些看门狗功能。在内核中,即使 /dev/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 处理程序需要做额外的事情(即至少警告用户)。
我找不到从用户空间获取此设置的方法:(感谢任何帮助。