Qt开源作品36-程序守护进程
2023-09-14 09:01:42 时间
一、前言
没有任何人敢保证自己写的程序没有任何BUG,尤其是在商业项目中,程序量越大,复杂度越高,出错的概率越大,尤其是现场环境千差万别,和当初本地电脑测试环境很可能不一样,有很多特殊情况没有考虑到,如果需要保证程序7*24小时运行,则需要想一些办法能够让程序死了能够活过来,在嵌入式linux上,大部分会采用看门狗的形式来处理,程序打开看门狗驱动后,定时喂狗,一旦超过规定的时间,则硬件软复位等。这种方式相对来说比较可靠,如果需要在普通PC机上运行怎办呢?本篇文章提供一个软件实现守护进程的办法,原理就是udp通信,单独写个守护进程程序,专门负责检测主程序是否存在,不存在则启动。主程序只需要启动live类监听端口,收到hello就回复ok就行。
为了使得兼容任意程序,特意提炼出来共性,增加了多种设置。
主要功能:
- 可设置检测的程序名称。
- 可设置udp通信端口。
- 可设置超时次数。
- 自动记录已重启次数。
- 自动记录最后一次重启时间。
- 是否需要重新刷新桌面。
- 可重置当前重启次数和最后重启时间。
- 自动隐藏的托盘运行或者后台运行。
- 提供界面设置程序名称已经开启和暂停服务。
二、代码思路
AppLive::AppLive(QObject *parent) : QObject(parent)
{
udpServer = new QUdpSocket(this);
QString name = qApp->applicationFilePath();
QStringList list = name.split("/");
appName = list.at(list.count() - 1).split(".").at(0);
}
void AppLive::readData()
{
QByteArray tempData;
do {
tempData.resize(udpServer->pendingDatagramSize());
QHostAddress sender;
quint16 senderPort;
udpServer->readDatagram(tempData.data(), tempData.size(), &sender, &senderPort);
QString data = QLatin1String(tempData);
if (data == "hello") {
udpServer->writeDatagram(QString("%1OK").arg(appName).toLatin1(), sender, senderPort);
}
} while (udpServer->hasPendingDatagrams());
}
bool AppLive::start(int port)
{
bool ok = udpServer->bind(port);
if (ok) {
connect(udpServer, SIGNAL(readyRead()), this, SLOT(readData()));
qDebug() << TIMEMS << "Start AppLive Ok";
}
return ok;
}
void AppLive::stop()
{
udpServer->abort();
disconnect(udpServer, SIGNAL(readyRead()), this, SLOT(readData()));
}
三、效果图
四、开源主页
- 以上作品完整源码下载都在开源主页,会持续不断更新作品数量和质量,欢迎各位关注。
- 本开源项目已经成功升级到V2.0版本,分门别类,图文并茂,保你爽到爆。
- Qt开源武林秘籍开发经验,看完学完,20K起薪,没有找我!
相关文章
- 树莓派基于QT实现利用USB转485模块进行串口通讯「建议收藏」
- 基于QT播放器的实现(一)Rgb、YUV格式(附带代码)
- Qt 用QMediaPlayer实现简易播放器
- mfc控件工具栏怎么打开_Qt界面库
- qlineedit_qt layoutstretch
- PyQt5安装以及使用教程 (window 上含QT Designer的安装)
- Qt自绘系列-一堆甜甜圈
- centos7 qt之程序编译 cant start process “cmake”详解程序员
- 编程Linux下Qt实例编程:从入门到精通(linux下qt实例)
- Qt信号与槽机制详解
- Qt迭代器(Java类型和STL类型)详解
- 使用Qt框架轻松连接MySQL数据库(qt与mysql连接)
- Linux下 Qt 安装指南(linux下qt的安装)
- Qt在Linux下的强大开发体验(qt在linux开发)
- 在Linux中安装Qt第三方库的指南(linux安装qt库)
- Linux安装Qt的步骤指导(linux怎么安装qt)
- Linux上Qt的快速安装(linux下载qt)
- Qt与Oracle数据库的高效结合(qt数据库oracle)
- 利用Linux系统和QT技术实现高效嵌入式应用程序开发(linux嵌入式qt)
- Qt编程实现MySQL数据库调用(qt调用MySQL数据库)
- Linux系统中实现Qt串口通信的完美指南(qt串口通信linux)
- 提高数据处理效率:探究Qt与MySQL数据库的结合应用(qt与mysql数据库)
- 深入了解Linux QT版本,掌握最新技术动态(linuxqt版本)
- Qt 5 与 MySQL 数据库联合使用:简单高效的开发实践(qt 5 mysql)
- Qt与SQLServer结合,提升开发效率(qt和sqlserver)
- 编程使用Qt快速实现SQLServer数据库编程(qt中sqlserver)
- 开发Linux应用程序:使用Qt图形界面(linux qt gui)
- MySQL和QT不配套使用,无法实现事务处理(mysql不支持qt事务)
- Redis使用Qt解决读写互斥问题(redis读写互斥qt)