日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

喂狗机制 Software Dog

發布時間:2024/6/21 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 喂狗机制 Software Dog 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為了避免進程發呆,或者陷入死循環,但是進程并沒有真正掛死,導致軟件看門狗沒有監控得到進程掛死而重啟。

所以,添加一個喂狗自愈機制。

time_t lastTime = time(NULL);

for(耗時功能處理)

  //喂狗
  if(time(NULL) - lastTime >= 120)
  {
    lastTime = time(NULL);
    Feed(600,"taskman"); //將當前進程喂狗
    LOG(DEBUG_K,"---- Feed dog ----
");
  }

#ifndef _SOFT_DOG_HPP_
#define _SOFT_DOG_HPP_

///////////////////////////////////////////////////////////////////////////
// 
//           由于原有方案是被監控程序清計數器,監控程序(軟狗)加計數器,這種方案可能導致兩個進程同時操作一個文件,出現難以
//           預料的問題。因此,改成一個進程寫,另外一個進程讀的方案。為實現此目的,特用系統運行時間作為原來的計數器。
//           被監控程序喂狗時,只需要將喂狗時的系統運行時間寫入到文件中即可。監控程序在監控時,如發現文件中的系統運行時間與
//           “當前”系統運行時間差大于最大允許時間(dead_seconds), 判斷被監控程序出問題(沒有及時喂狗),監控程序將殺死被監控程序
/////////////////////////////////////////////////////////////////////////////



#include <stdio.h>
#include <unistd.h>
#include <sys/sysinfo.h>

#define SOFT_WATCH_PATH "/var/volatile/watch"


struct process_t
{
    long up_time;
    long dead_seconds;
    int pid;
    char name[40];
};


//喂狗,如果超過dead_seconds秒沒有喂狗,則此進程將被重啟,為防止頻繁操作文件,
//建議增加定時器,使得調用Feed的間隔至少在5秒以上,同時要確保間隔小于最大喂狗時間,
//process_name為線程名,長度不能超過39個字符
inline bool Feed(unsigned short dead_seconds, const char *process_name)
{
	int pid = getpid();
	if(pid<1)
	{
		return false;
	}

	struct sysinfo info;
	if ( sysinfo( &info ) != 0 )
	{
		return false;
	}


	struct process_t process = { info.uptime, dead_seconds, pid, "" };
	memset( process.name, '', sizeof( process.name ) );
	strncpy( process.name, process_name, sizeof(process.name) - 1 );

	char filename[sizeof(SOFT_WATCH_PATH) + 10];
	sprintf(filename, "%s/%d", SOFT_WATCH_PATH, pid);
	int fd = open(filename, O_RDWR | O_CREAT);
	if( fd < 0 )
	{
		return false;
	}
	write(fd, &process, sizeof(process_t));
	close( fd );

	return true;
}

#endif // _SOFT_DOG_HPP_

  

總結

以上是生活随笔為你收集整理的喂狗机制 Software Dog的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。