5#include "windowsfork.h"
9#include <QCoreApplication>
10#include <QLoggingCategory>
13Q_LOGGING_CATEGORY(C_SERVER_WIN,
"cutelyst.server.windows", QtWarningMsg)
15WindowsFork::WindowsFork(QObject *parent)
24 m_masterChildProcess =
new QProcess(
this);
25 connect(m_masterChildProcess,
26 static_cast<void (QProcess::*)(
int, QProcess::ExitStatus)
>(&QProcess::finished),
28 &WindowsFork::childFinished);
30 auto env = QProcessEnvironment::systemEnvironment();
31 env.insert(QStringLiteral(
"CUTELYST_WSGI_IGNORE_MASTER"), QStringLiteral(
"1"));
32 m_masterChildProcess->setProcessEnvironment(env);
34 m_masterChildProcess->setProcessChannelMode(QProcess::ForwardedChannels);
36 m_masterChildProcess->setProgram(QCoreApplication::applicationFilePath());
38 m_masterChildProcess->setArguments(QCoreApplication::arguments());
42 int ret = qApp->exec();
60 if (m_masterChildProcess) {
61 m_masterChildProcess->kill();
67 if (m_masterChildProcess) {
68 m_masterChildProcess->terminate();
76 if (!m_materChildRestartTimer) {
77 m_materChildRestartTimer =
new QTimer(
this);
78 m_materChildRestartTimer->setInterval(1 * 1000);
79 m_materChildRestartTimer->setSingleShot(
false);
81 connect(m_materChildRestartTimer, &QTimer::timeout,
this, &WindowsFork::restartTerminate);
83 m_materChildRestartTimer->start();
86void WindowsFork::startChild()
88 m_masterChildProcess->start();
91void WindowsFork::childFinished(
int exitCode, QProcess::ExitStatus exitStatus)
93 qCDebug(C_SERVER_WIN) <<
"Master child finished" << exitCode << exitStatus;
94 if (m_materChildRestartTimer || exitStatus == QProcess::CrashExit) {
101void WindowsFork::restartTerminate()
103 if (++m_autoReloadCount > 5) {
virtual void restart() override
virtual void terminateChild() override
virtual int exec(bool lazy, bool master) override
virtual bool continueMaster(int *exit=nullptr) override
virtual void killChild() override