From de2578745109a32b4f6fee5dcec37184ea97bc8b Mon Sep 17 00:00:00 2001 From: outfoxxed Date: Sun, 13 Jul 2025 19:48:08 -0700 Subject: [PATCH] io/process: null stdio channels in detached processes --- src/core/qmlglobal.cpp | 9 ++++++++- src/io/process.cpp | 5 +++++ src/io/processcore.hpp | 4 ++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/core/qmlglobal.cpp b/src/core/qmlglobal.cpp index 0aaf06c5..0aba3065 100644 --- a/src/core/qmlglobal.cpp +++ b/src/core/qmlglobal.cpp @@ -263,7 +263,6 @@ void QuickshellGlobal::execDetached(const qs::io::process::ProcessContext& conte auto args = context.command.sliced(1); QProcess process; - qs::io::process::setupProcessEnvironment(&process, context.clearEnvironment, context.environment); if (!context.workingDirectory.isEmpty()) { @@ -272,6 +271,14 @@ void QuickshellGlobal::execDetached(const qs::io::process::ProcessContext& conte process.setProgram(cmd); process.setArguments(args); + + process.setStandardInputFile(QProcess::nullDevice()); + + if (context.unbindStdout) { + process.setStandardOutputFile(QProcess::nullDevice()); + process.setStandardErrorFile(QProcess::nullDevice()); + } + process.startDetached(); } diff --git a/src/io/process.cpp b/src/io/process.cpp index c8250c7e..6055e2c9 100644 --- a/src/io/process.cpp +++ b/src/io/process.cpp @@ -249,6 +249,11 @@ void Process::startDetached() { this->setupEnvironment(&process); process.setProgram(cmd); process.setArguments(args); + + process.setStandardInputFile(QProcess::nullDevice()); + process.setStandardOutputFile(QProcess::nullDevice()); + process.setStandardErrorFile(QProcess::nullDevice()); + process.startDetached(); } diff --git a/src/io/processcore.hpp b/src/io/processcore.hpp index c74f6fbc..37ec4093 100644 --- a/src/io/processcore.hpp +++ b/src/io/processcore.hpp @@ -16,6 +16,7 @@ class ProcessContext { Q_PROPERTY(QHash environment MEMBER environment WRITE setEnvironment); Q_PROPERTY(bool clearEnvironment MEMBER clearEnvironment WRITE setClearEnvironment); Q_PROPERTY(QString workingDirectory MEMBER workingDirectory WRITE setWorkingDirectory); + Q_PROPERTY(bool unbindStdout MEMBER unbindStdout WRITE setUnbindStdout); Q_GADGET; QML_STRUCTURED_VALUE; QML_VALUE_TYPE(processContext); @@ -45,6 +46,8 @@ public: this->workingDirectorySet = true; } + void setUnbindStdout(bool unbindStdout) { this->unbindStdout = unbindStdout; } + QList command; QHash environment; bool clearEnvironment = false; @@ -54,6 +57,7 @@ public: bool environmentSet : 1 = false; bool clearEnvironmentSet : 1 = false; bool workingDirectorySet : 1 = false; + bool unbindStdout : 1 = true; }; void setupProcessEnvironment(