udp程序启动后检测都是未启动_Qt开源作品36-程序守护进程

## 一、前言

没有任何人敢保证自己写的程序没有任何BUG,尤其是在商业项目中,程序量越大,复杂度越高,出错的概率越大,尤其是现场环境千差万别,和当初本地电脑测试环境很可能不一样,有很多特殊情况没有考虑到,如果需要保证程序7*24小时运行,则需要想一些办法能够让程序死了能够活过来,在嵌入式linux上,大部分会采用看门狗的形式来处理,程序打开看门狗驱动后,定时喂狗,一旦超过规定的时间,则硬件软复位等。这种方式相对来说比较可靠,如果需要在普通PC机上运行怎办呢?本篇文章提供一个软件实现守护进程的办法,原理就是udp通信,单独写个守护进程程序,专门负责检测主程序是否存在,不存在则启动。主程序只需要启动live类监听端口,收到hello就回复ok就行。

为了使得兼容任意程序,特意提炼出来共性,增加了多种设置。

**主要功能:**

1. 可设置检测的程序名称。

2. 可设置udp通信端口。

3. 可设置超时次数。

4. 自动记录已重启次数。

5. 自动记录最后一次重启时间。

6. 是否需要重新刷新桌面。

7. 可重置当前重启次数和最后重启时间。

8. 自动隐藏的托盘运行或者后台运行。

9. 提供界面设置程序名称已经开启和暂停服务。

## 二、代码思路

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()));}

## 三、效果图

ba3c3d45757cd5c99f077793da9ad175.png

## 四、开源主页

**以上作品完整源码下载都在开源主页,会持续不断更新作品数量和质量,欢迎各位关注。**

1. 国内站点:[https://gitee.com/feiyangqingyun/QWidgetDemo](https://gitee.com/feiyangqingyun/QWidgetDemo)

2. 国际站点:[https://github.com/feiyangqingyun/QWidgetDemo](https://github.com/feiyangqingyun/QWidgetDemo)

3. 个人主页:[https://blog.csdn.net/feiyangqingyun](https://blog.csdn.net/feiyangqingyun)

4. 知乎主页:[https://www.zhihu.com/people/feiyangqingyun/](https://www.zhihu.com/people/feiyangqingyun/)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值