From 11905967fe2053d81000831d08b384ccc662aef6 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 26 Jun 2024 10:44:34 +0200 Subject: [PATCH] Process: Introduce DetachedChannelMode enum The default impl of Process::startDetached() forwards process channels. Make it optional by providing an additional argument of DetachedChannelMode type for Process::startDetached(). Change-Id: I6cb55377c21dfedacd53117756894d07e354e0fe Reviewed-by: hjk --- src/libs/utils/processenums.h | 5 +++++ src/libs/utils/qtcprocess.cpp | 16 +++++++++++----- src/libs/utils/qtcprocess.h | 1 + 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/libs/utils/processenums.h b/src/libs/utils/processenums.h index 903bc8df9bf..e19321fcd04 100644 --- a/src/libs/utils/processenums.h +++ b/src/libs/utils/processenums.h @@ -41,6 +41,11 @@ enum class Channel { Error }; +enum class DetachedChannelMode { + Forward, + Discard +}; + enum class TextChannelMode { // Keep | Emit | Emit // raw | text | content diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index 05111ef8efa..2a51e01071f 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -1317,12 +1317,18 @@ void Process::closeWriteChannel() d->sendControlSignal(ControlSignal::CloseWriteChannel); } -bool Process::startDetached(const CommandLine &cmd, const FilePath &workingDirectory, qint64 *pid) +bool Process::startDetached(const CommandLine &cmd, const FilePath &workingDirectory, + DetachedChannelMode channelMode, qint64 *pid) { - return QProcess::startDetached(cmd.executable().toUserOutput(), - cmd.splitArguments(), - workingDirectory.toUserOutput(), - pid); + QProcess process; + process.setProgram(cmd.executable().toUserOutput()); + process.setArguments(cmd.splitArguments()); + process.setWorkingDirectory(workingDirectory.toUserOutput()); + if (channelMode == DetachedChannelMode::Discard) { + process.setStandardOutputFile(QProcess::nullDevice()); + process.setStandardErrorFile(QProcess::nullDevice()); + } + return process.startDetached(pid); } void Process::setLowPriority() diff --git a/src/libs/utils/qtcprocess.h b/src/libs/utils/qtcprocess.h index 3f043214f96..cc629fe127b 100644 --- a/src/libs/utils/qtcprocess.h +++ b/src/libs/utils/qtcprocess.h @@ -137,6 +137,7 @@ public: // Some of them could be aggregated in another public utils class. static bool startDetached(const CommandLine &cmd, const FilePath &workingDirectory = {}, + DetachedChannelMode channelMode = DetachedChannelMode::Forward, qint64 *pid = nullptr); // Starts the command and waits for finish.