AHA! Setelah menggali melalui linux/watchdog.h
kernel dan drivers/watchdog/softdog.c
, saya dapat menentukan kemampuan softdog ioctl()
antarmuka. Melihat kemampuan yang diumumkan di struct watchdog_info
:
static struct watchdog_info ident = {
.options = WDIOF_SETTIMEOUT |
WDIOF_KEEPALIVEPING |
WDIOF_MAGICCLOSE,
.firmware_version = 0,
.identity = "Software Watchdog",
};
ya mendukung tutup ajaib yang (tampaknya) menimpa CONFIG_WATCHDOG_NOWAYOUT
. Jadi, ketika mengakhiri secara normal, saya harus menulis satu karakter 'V' ke /dev/watchdog
kemudian tutup, dan timer akan berhenti menghitung.
Sebuah ioctl()
sederhana pada deskriptor file ke /dev/watchdog
menanyakan WDIOC_GETSUPPORT
memungkinkan seseorang untuk menentukan apakah bendera ini disetel. Kode palsu:
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.
}
Saat bekerja dengan pengawas perangkat keras, Anda mungkin ingin membuka dengan O_NONBLOCK
jadi ioctl()
bukan open()
blok (sehingga mendeteksi kartu sibuk).
Jika WDIOF_MAGICCLOSE
tidak didukung, anggap saja bahwa soft watchdog dikonfigurasikan dengan NOWAYOUT. Ingat, baru buka perangkat berhasil memulai hitungan mundur. Jika semua yang Anda lakukan adalah memeriksa untuk melihat apakah itu mendukung tutup ajaib dan mendukungnya, maka tutup ajaib . Jika tidak, pastikan untuk menghadapi kenyataan bahwa Anda sekarang memiliki pengawas yang sedang berjalan.
Sayangnya, tidak ada cara nyata untuk mengetahui dengan pasti tanpa benar-benar memulainya, setidaknya yang tidak dapat saya temukan.
pengawas menjaga agar sistem tidak terkunci dengan keras, baik karena kerusakan perangkat lunak, atau kegagalan perangkat keras.
yang Anda butuhkan adalah daemon monitoring daemon (dmd). centang 'monit'