Linux 軟體看門狗 watchdog

來源:互聯網
上載者:User

標籤:style   ar   color   os   sp   on   檔案   資料   log   

Linux 內建了一個 watchdog 的實現,用於監視系統的運行,包括一個核心 watchdog module 和一個使用者空間的 watchdog 程式。核心 watchdog 模組通過 /dev/watchdog 這個字元裝置與使用者空間通訊。使用者空間程式一旦開啟 /dev/watchdog 裝置(俗稱“開門放狗”),就會導致在核心中啟動一個1分鐘的定時器(系統預設時間),此後,使用者空間程式需要保證在1分鐘之內向這個裝置寫入資料(俗稱“定期喂狗”),每次寫操作會導致重新設定定時器。如果使用者空間程式在1分鐘之內沒有寫操作,定時器到期會導致一次系統 reboot 操作(“狗咬人了”呵呵)。通過這種機制,我們可以保證系統核心進程大部分時間都處於運行狀態,即使特定情形下進程崩潰,因無法正常定時“喂狗”,Linux系統在看門狗作用下重新啟動(reboot),核心進程又運行起來了。多用於嵌入式系統。

開啟 /dev/watchdog 裝置(“開門放狗”):

int fd_watchdog = open("/dev/watchdog", O_WRONLY);
if(fd_watchdog == -1) {
 int err = errno;
 printf("\n!!! FAILED to open /dev/watchdog, errno: %d, %s\n", err, strerror(err));
 syslog(LOG_WARNING, "FAILED to open /dev/watchdog, errno: %d, %s", err, strerror(err));
}

每隔一段時間向 /dev/watchdog 裝置寫入資料(“定期喂狗”):

//feed the watchdog
if(fd_watchdog >= 0) {
 static unsigned char food = 0;
 ssize_t eaten = write(fd_watchdog, &food, 1);
 if(eaten != 1) {
  puts("\n!!! FAILED feeding watchdog");
  syslog(LOG_WARNING, "FAILED feeding watchdog");
 }
}

關閉 /dev/watchdog 裝置,通常不需要這個步驟:


 close(fd_watchdog);

所需標頭檔:

#include <unistd.h>
#include <sys/stat.h>
#include <syslog.h>
#include <errno.h>

 

Linux 軟體看門狗 watchdog

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.