io/process: null stdio channels in detached processes

This commit is contained in:
outfoxxed 2025-07-13 19:48:08 -07:00
parent b011cd9d33
commit de25787451
Signed by untrusted user: outfoxxed
GPG key ID: 4C88A185FB89301E
3 changed files with 17 additions and 1 deletions

View file

@ -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();
}

View file

@ -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();
}

View file

@ -16,6 +16,7 @@ class ProcessContext {
Q_PROPERTY(QHash<QString, QVariant> 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<QString> command;
QHash<QString, QVariant> 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(