/* SPDX-FileCopyrightText: 2021 Aleix Pol Gonzalez SPDX-License-Identifier: LGPL-2.0-only */ #include "sessiontrack.h" #include "signalhandler.h" #include #include #include #include SessionTrack::SessionTrack(const QVector &processes) : m_processes(processes) { SignalHandler::self()->addSignal(SIGTERM); connect(SignalHandler::self(), &SignalHandler::signalReceived, QCoreApplication::instance(), [](int signal) { if (signal == SIGTERM) { QCoreApplication::instance()->exit(0); } }); for (auto process : std::as_const(m_processes)) { connect(process, &QProcess::finished, this, [this] { m_processes.removeAll(static_cast(sender())); }); } QObject::connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, this, &SessionTrack::deleteLater); } SessionTrack::~SessionTrack() { disconnect(this, nullptr, QCoreApplication::instance(), nullptr); for (auto process : std::as_const(m_processes)) { process->terminate(); } for (auto process : std::as_const(m_processes)) { if (process->state() == QProcess::Running && !process->waitForFinished(500)) { process->kill(); } else { delete process; } } }