问题:这两天遇到项目程序莫名其妙的运行异常,那么可能需要自动终结该进程并重启。
思路:为了判断主程序是否正常运行,我们可以这样做,写一个辅助程序跟主程序通讯,这里采用本地udp socket的方式保持联系。主程序向辅助程序定时发送确认包。当辅助程序检测到主程序在一定时间内(假设是3s)没有发送数据包,那么辅助程序则判定主程序异常,先尝试性杀死进程,并自动重启。在这里考虑到这个程序是一个辅助程序,那么就打算把他做成一个后台服务程序。
先看下辅助程序:
//main.cpp
#include "Widget.h"
#include <QApplication>
#include <QProcess>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QProcess::startDetached("./xxx.exe");
Widget w;
return a.exec();
}
//widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QUdpSocket>
#include <QTimer>
#include <QProcess>
#include <QWidget>
#include <QCloseEvent>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void slotReadyRead();
void slotTimeout();