首页| 论坛| 消息

标题:Qt编写守护程序保证程序一直运行(开源)
作者:liudianwu
日期:2019-03-02 14:48
内容:

没有任何人敢保证自己写的程序没有任何BUG,尤其是在商业项目中,程序量越大,复杂度越高,出错的概率越大,尤其是现场环境千差万别,和当初本地电脑测试环境很可能不一样,有很多特殊情况没有考虑到,如果需要保证程序7*24小时运行,则需要想一些办法能够让程序死了能够活过来,在嵌入式linux上,大部分会采用看门狗的形式来处理,程序打开看门狗驱动后,定时喂狗,一旦超过规定的时间,则硬件软复位等。这种方式相对来说比较可靠,如果需要在普通PC机上运行怎办呢?本篇文章提供一个软件实现守护进程的办法,原理就是udp通信,单独写个守护进程程序,专门负责检测主程序是否存在,不存在则启动。主程序只需要启动live类监听端口,收到hello就回复ok就行。
为了使得兼容任意程序,特意提炼出来共性,增加了多种设置。
1:可设置检测的程序名称。
2:可设置udp通信端口。
3:可设置超时次数。
4:自动记录已重启次数。
5:自动记录最后一次重启时间。
6:是否需要重新刷新桌面。
7:可重置当前重启次数和最后重启时间。
8:自动隐藏的托盘运行或者后台运行。
9:提供界面设置程序名称已经开启和暂停服务。
代码下载:

守护进程核心代码:
#pragma execution_character_set("utf-8")
#include "frmmain.h"
#include "ui_frmmain.h"
#include "qtimer.h"
#include "qudpsocket.h"
#include "qsharedmemory.h"
#include "qprocess.h"
#include "qdatetime.h"
#include "qapplication.h"
#include "qdesktopservices.h"
#include "qmessagebox.h"
#if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
#include "qstandardpaths.h"
#endif
#include "app.h"
frmMain::frmMain(QWidget *parent) : QWidget(parent), ui(new Ui::frmMain)
{
ui->setupUi(this);
this->initForm();
}
frmMain::~frmMain()
{
delete ui;
}
void frmMain::changeEvent(QEvent *event)
{
//隐藏当前界面,最小化到托盘
if(event->type() == QEvent::WindowStateChange) {
..


#1 [九重水 03-02 16:19]
没电,电脑挂了,连自己都守护不了,看你怎么守护别人
#2 回 九重水 的帖子 [liudianwu 03-02 17:35]
九重水:没电,电脑挂了,连自己都守护不了,看你怎么守护别人  (2019-03-02 16:19) 
来你过来,我保证不打屎你!
#3 [leytou 03-02 17:56]
感谢大佬分享
#4 回 九重水 的帖子 [xzp21st 03-02 18:06]
九重水:没电,电脑挂了,连自己都守护不了,看你怎么守护别人  (2019-03-02 16:19) 
你这种情况得考虑上ups了
#5 [wcp520 03-03 15:16]
感谢大佬分享

<< 1 2 3 >> (1/3)

回复 发表
主题 版块