ユーザー空間から、Linux のソフト ウォッチドッグが設定されていないかどうかを確認するにはどうすればよいですか?

あはは!カーネルの 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) です。 「モニター」をチェックしてください