forked from quickshell/quickshell
io/process: null stdio channels in detached processes
This commit is contained in:
parent
b011cd9d33
commit
de25787451
3 changed files with 17 additions and 1 deletions
|
@ -263,7 +263,6 @@ void QuickshellGlobal::execDetached(const qs::io::process::ProcessContext& conte
|
||||||
auto args = context.command.sliced(1);
|
auto args = context.command.sliced(1);
|
||||||
|
|
||||||
QProcess process;
|
QProcess process;
|
||||||
|
|
||||||
qs::io::process::setupProcessEnvironment(&process, context.clearEnvironment, context.environment);
|
qs::io::process::setupProcessEnvironment(&process, context.clearEnvironment, context.environment);
|
||||||
|
|
||||||
if (!context.workingDirectory.isEmpty()) {
|
if (!context.workingDirectory.isEmpty()) {
|
||||||
|
@ -272,6 +271,14 @@ void QuickshellGlobal::execDetached(const qs::io::process::ProcessContext& conte
|
||||||
|
|
||||||
process.setProgram(cmd);
|
process.setProgram(cmd);
|
||||||
process.setArguments(args);
|
process.setArguments(args);
|
||||||
|
|
||||||
|
process.setStandardInputFile(QProcess::nullDevice());
|
||||||
|
|
||||||
|
if (context.unbindStdout) {
|
||||||
|
process.setStandardOutputFile(QProcess::nullDevice());
|
||||||
|
process.setStandardErrorFile(QProcess::nullDevice());
|
||||||
|
}
|
||||||
|
|
||||||
process.startDetached();
|
process.startDetached();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -249,6 +249,11 @@ void Process::startDetached() {
|
||||||
this->setupEnvironment(&process);
|
this->setupEnvironment(&process);
|
||||||
process.setProgram(cmd);
|
process.setProgram(cmd);
|
||||||
process.setArguments(args);
|
process.setArguments(args);
|
||||||
|
|
||||||
|
process.setStandardInputFile(QProcess::nullDevice());
|
||||||
|
process.setStandardOutputFile(QProcess::nullDevice());
|
||||||
|
process.setStandardErrorFile(QProcess::nullDevice());
|
||||||
|
|
||||||
process.startDetached();
|
process.startDetached();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ class ProcessContext {
|
||||||
Q_PROPERTY(QHash<QString, QVariant> environment MEMBER environment WRITE setEnvironment);
|
Q_PROPERTY(QHash<QString, QVariant> environment MEMBER environment WRITE setEnvironment);
|
||||||
Q_PROPERTY(bool clearEnvironment MEMBER clearEnvironment WRITE setClearEnvironment);
|
Q_PROPERTY(bool clearEnvironment MEMBER clearEnvironment WRITE setClearEnvironment);
|
||||||
Q_PROPERTY(QString workingDirectory MEMBER workingDirectory WRITE setWorkingDirectory);
|
Q_PROPERTY(QString workingDirectory MEMBER workingDirectory WRITE setWorkingDirectory);
|
||||||
|
Q_PROPERTY(bool unbindStdout MEMBER unbindStdout WRITE setUnbindStdout);
|
||||||
Q_GADGET;
|
Q_GADGET;
|
||||||
QML_STRUCTURED_VALUE;
|
QML_STRUCTURED_VALUE;
|
||||||
QML_VALUE_TYPE(processContext);
|
QML_VALUE_TYPE(processContext);
|
||||||
|
@ -45,6 +46,8 @@ public:
|
||||||
this->workingDirectorySet = true;
|
this->workingDirectorySet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setUnbindStdout(bool unbindStdout) { this->unbindStdout = unbindStdout; }
|
||||||
|
|
||||||
QList<QString> command;
|
QList<QString> command;
|
||||||
QHash<QString, QVariant> environment;
|
QHash<QString, QVariant> environment;
|
||||||
bool clearEnvironment = false;
|
bool clearEnvironment = false;
|
||||||
|
@ -54,6 +57,7 @@ public:
|
||||||
bool environmentSet : 1 = false;
|
bool environmentSet : 1 = false;
|
||||||
bool clearEnvironmentSet : 1 = false;
|
bool clearEnvironmentSet : 1 = false;
|
||||||
bool workingDirectorySet : 1 = false;
|
bool workingDirectorySet : 1 = false;
|
||||||
|
bool unbindStdout : 1 = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
void setupProcessEnvironment(
|
void setupProcessEnvironment(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue