あはは!カーネルの linux/watchdog.h を掘り下げた後 そして drivers/watchdog/softdog.c 、ソフトドッグ ioctl() の機能を特定できました インターフェース。 struct watchdog_info で発表された機能を見ると、 :
static struct watchdog_info ident = {
.options = WDIOF_SETTIMEOUT |
WDIOF_KEEPALIVEPING |
WDIOF_MAGICCLOSE,
.firmware_version = 0,
.identity = "Software Watchdog",
};
する CONFIG_WATCHDOG_NOWAYOUT をオーバーライドする (と思われる) 魔法の終了をサポートします .なので、正常終了時は /dev/watchdog に 'V' という文字を 1 文字書く必要があります その後 閉じると、タイマーのカウントが停止します。
シンプルな ioctl() /dev/watchdog へのファイル記述子 WDIOC_GETSUPPORT を尋ねる このフラグが設定されているかどうかを判断できます。擬似コード:
int fd;
struct watchdog_info info;
fd = open("/dev/watchdog", O_WRONLY);
if (fd == -1) {
perror("open");
// abort, timer did not start - no additional concerns
}
if (ioctl(fd, WDIOC_GETSUPPORT, &info)) {
perror("ioctl");
// abort, but you probably started the timer! See below.
}
if (WDIOF_MAGICCLOSE & info.options) {
printf("Watchdog supports magic close char\n");
// You have started the timer here! Handle that appropriately.
}
ハードウェア ウォッチドッグを使用する場合は、O_NONBLOCK で開くことをお勧めします。 だから ioctl() open() ではない ブロックします (したがって、使用中のカードを検出します)。
WDIOF_MAGICCLOSE の場合 はサポートされていないため、ソフト ウォッチドッグが NOWAYOUT で構成されていると想定する必要があります。覚えておいてください、開くだけです デバイスはカウントダウンを正常に開始します。マジック クローズをサポートしているかどうかを調べるだけなら、マジック クローズ .それ以外の場合は、実行中のウォッチドッグがあるという事実に対処してください。
残念ながら、実際に起動しない限り確実に知る方法はありません。少なくとも私は見つけられませんでした.
ウォッチドッグは、ソフトウェアのクラッシュやハードウェアの障害によるシステムのハードロックを防ぎます。
必要なのは、デーモン監視デーモン (dmd) です。 「モニター」をチェックしてください