QProcess Class
Die Klasse „QProcess“ dient dazu, externe Programme zu starten und mit ihnen zu kommunizieren. Mehr...
| Header: | #include <QProcess> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Erbt von: | QIODevice |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- Veraltete Mitglieder
- QProcess ist Teil von „Eingabe/Ausgabe“ und „Netzwerk“.
Hinweis: Alle Funktionen dieser Klasse sind reentrant.
Öffentliche Typen
| struct | CreateProcessArguments |
(since 6.6) struct | UnixProcessParameters |
| CreateProcessArgumentModifier | |
| enum | ExitStatus { NormalExit, CrashExit } |
| enum | InputChannelMode { ManagedInputChannel, ForwardedInputChannel } |
| enum | ProcessChannel { StandardOutput, StandardError } |
| enum | ProcessChannelMode { SeparateChannels, MergedChannels, ForwardedChannels, ForwardedErrorChannel, ForwardedOutputChannel } |
| enum | ProcessError { FailedToStart, Crashed, Timedout, WriteError, ReadError, UnknownError } |
| enum | ProcessState { NotRunning, Starting, Running } |
(since 6.6) enum class | UnixProcessFlag { CloseFileDescriptors, CreateNewSession, DisconnectControllingTerminal, IgnoreSigPipe, ResetIds, …, DisableCoreDumps } |
| flags | UnixProcessFlags |
Öffentliche Funktionen
| QProcess(QObject *parent = nullptr) | |
| virtual | ~QProcess() |
| QStringList | arguments() const |
(since 6.0) std::function<void ()> | childProcessModifier() const |
| void | closeReadChannel(QProcess::ProcessChannel channel) |
| void | closeWriteChannel() |
| QProcess::CreateProcessArgumentModifier | createProcessArgumentsModifier() const |
| QProcess::ProcessError | error() const |
| int | exitCode() const |
| QProcess::ExitStatus | exitStatus() const |
(since 6.7) void | failChildProcessModifier(const char *description, int error = 0) |
| QProcess::InputChannelMode | inputChannelMode() const |
| QString | nativeArguments() const |
| QProcess::ProcessChannelMode | processChannelMode() const |
| QProcessEnvironment | processEnvironment() const |
| qint64 | processId() const |
| QString | program() const |
| QByteArray | readAllStandardError() |
| QByteArray | readAllStandardOutput() |
| QProcess::ProcessChannel | readChannel() const |
| void | setArguments(const QStringList &arguments) |
(since 6.0) void | setChildProcessModifier(const std::function<void ()> &modifier) |
| void | setCreateProcessArgumentsModifier(QProcess::CreateProcessArgumentModifier modifier) |
| void | setInputChannelMode(QProcess::InputChannelMode mode) |
| void | setNativeArguments(const QString &arguments) |
| void | setProcessChannelMode(QProcess::ProcessChannelMode mode) |
| void | setProcessEnvironment(const QProcessEnvironment &environment) |
| void | setProgram(const QString &program) |
| void | setReadChannel(QProcess::ProcessChannel channel) |
| void | setStandardErrorFile(const QString &fileName, QIODeviceBase::OpenMode mode = Truncate) |
| void | setStandardInputFile(const QString &fileName) |
| void | setStandardOutputFile(const QString &fileName, QIODeviceBase::OpenMode mode = Truncate) |
| void | setStandardOutputProcess(QProcess *destination) |
(since 6.6) void | setUnixProcessParameters(const QProcess::UnixProcessParameters ¶ms) |
(since 6.6) void | setUnixProcessParameters(QProcess::UnixProcessFlags flagsOnly) |
| void | setWorkingDirectory(const QString &dir) |
| void | start(const QString &program, const QStringList &arguments = {}, QIODeviceBase::OpenMode mode = ReadWrite) |
| void | start(QIODeviceBase::OpenMode mode = ReadWrite) |
(since 6.0) void | startCommand(const QString &command, QIODeviceBase::OpenMode mode = ReadWrite) |
| bool | startDetached(qint64 *pid = nullptr) |
| QProcess::ProcessState | state() const |
(since 6.6) QProcess::UnixProcessParameters | unixProcessParameters() const |
| bool | waitForFinished(int msecs = 30000) |
| bool | waitForStarted(int msecs = 30000) |
| QString | workingDirectory() const |
Neu implementierte öffentliche Funktionen
| virtual qint64 | bytesToWrite() const override |
| virtual void | close() override |
| virtual bool | isSequential() const override |
| virtual bool | open(QIODeviceBase::OpenMode mode = ReadWrite) override |
| virtual bool | waitForBytesWritten(int msecs = 30000) override |
| virtual bool | waitForReadyRead(int msecs = 30000) override |
Öffentliche Slots
Signale
| void | errorOccurred(QProcess::ProcessError error) |
| void | finished(int exitCode, QProcess::ExitStatus exitStatus = NormalExit) |
| void | readyReadStandardError() |
| void | readyReadStandardOutput() |
| void | started() |
| void | stateChanged(QProcess::ProcessState newState) |
Statische öffentliche Mitglieder
| int | execute(const QString &program, const QStringList &arguments = {}) |
| QString | nullDevice() |
| QStringList | splitCommand(QStringView command) |
| bool | startDetached(const QString &program, const QStringList &arguments = {}, const QString &workingDirectory = QString(), qint64 *pid = nullptr) |
| QStringList | systemEnvironment() |
Geschützte Funktionen
| void | setProcessState(QProcess::ProcessState state) |
Neu implementierte geschützte Funktionen
| virtual qint64 | readData(char *data, qint64 maxlen) override |
Ausführliche Beschreibung
Einen Prozess ausführen
Um einen Prozess zu starten, übergeben Sie den Namen und die Befehlszeilenargumente des Programms, das Sie ausführen möchten, als Argumente an ` start()`. Die Argumente werden als einzelne Zeichenfolgen in einem ` QStringList` übergeben.
Alternativ können Sie das Programm mit ` setProgram()` und ` setArguments()` zum Ausführen einrichten und anschließend ` start()` oder ` open()` aufrufen.
Der folgende Codeausschnitt führt beispielsweise das Analoguhr-Beispiel im Fusion-Stil auf X11-Plattformen aus, indem Zeichenfolgen, die „-style“ und „fusion“ enthalten, als zwei Elemente in der Argumentliste übergeben werden:
QObject *parent = new QObject;
...
QString program = "./path/to/Qt/examples/widgets/analogclock";
QStringList arguments;
arguments << "-style" << "fusion";
QProcess *myProcess = new QProcess(parent);
myProcess->start(program, arguments);QProcess wechselt daraufhin in den Zustand „ Starting “, und sobald das Programm gestartet ist, wechselt QProcess in den Zustand „ Running “ und gibt „ started()“ aus.
Mit QProcess können Sie einen Prozess als sequentielles E/A-Gerät behandeln. Sie können in den Prozess schreiben und aus ihm lesen, genau wie Sie über ` QTcpSocket` auf eine Netzwerkverbindung zugreifen würden. Sie können dann in die Standardeingabe des Prozesses schreiben, indem Sie ` write()` aufrufen, und die Standardausgabe lesen, indem Sie ` read()`, ` readLine()` und ` getChar()` aufrufen. Da `QProcess` von ` QIODevice` erbt, kann es auch als Eingabequelle für ` QXmlReader` oder zur Generierung von Daten verwendet werden, die mit ` QNetworkAccessManager` hochgeladen werden sollen.
Wenn der Prozess beendet wird, kehrt QProcess in den Zustand „ NotRunning “ (den Ausgangszustand) zurück und sendet das Signal „ finished()“.
Das Signal „ finished()“ liefert den Exit-Code und den Exit-Status des Prozesses als Argumente. Sie können außerdem „ exitCode()“ aufrufen, um den Exit-Code des zuletzt beendeten Prozesses abzurufen, sowie „ exitStatus()“, um dessen Exit-Status zu ermitteln. Tritt zu irgendeinem Zeitpunkt ein Fehler auf, gibt QProcess das Signal „ errorOccurred()“ aus. Sie können außerdem ` error()` aufrufen, um die Art des zuletzt aufgetretenen Fehlers zu ermitteln, und ` state()`, um den aktuellen Prozessstatus abzufragen.
Hinweis: QProcess wird unter VxWorks, iOS, tvOS oder watchOS nicht unterstützt.
Ermitteln der ausführbaren Datei
Das auszuführende Programm kann entweder durch den Aufruf von ` setProgram()` oder direkt im Aufruf von ` start()` festgelegt werden. Der Aufruf von ` start()` mit dem Programmnamen und den Argumenten entspricht dem Aufruf von ` setProgram()` und ` setArguments()` vor dieser Funktion und dem anschließenden Aufruf der Überladung ohne diese Parameter.
QProcess interpretiert den Programmnamen auf eine von drei verschiedenen Arten, ähnlich wie Unix-Shells und der Windows-Befehlsinterpreter in ihren jeweiligen Befehlszeilen:
- Ist der Programmname ein absoluter Pfad, so handelt es sich genau um die ausführbare Datei, die gestartet wird, und QProcess führt keine Suche durch.
- Ist der Programmname ein relativer Pfad mit mehr als einer Pfadkomponente (d. h., er enthält mindestens einen Schrägstrich), hängt das Startverzeichnis, in dem dieser relative Pfad durchsucht wird, vom Betriebssystem ab: Unter Windows ist es das aktuelle Arbeitsverzeichnis des übergeordneten Prozesses, während es unter Unix dasjenige ist, das mit setWorkingDirectory() festgelegt wurde.
- Ist der Programmname ein einfacher Dateiname ohne Schrägstriche, ist das Verhalten vom Betriebssystem abhängig. Auf Unix-Systemen durchsucht QProcess die Umgebungsvariable `
PATH`; unter Windows wird die Suche vom Betriebssystem durchgeführt, wobei zunächst das aktuelle Verzeichnis des übergeordneten Prozesses und anschließend die Umgebungsvariable `PATH` durchsucht werden (die vollständige Liste finden Sie in der Dokumentation zu `CreateProcess `).
Um plattformabhängiges Verhalten oder Probleme bei der Art und Weise, wie die aktuelle Anwendung gestartet wurde, zu vermeiden, ist es ratsam, stets einen absoluten Pfad zur zu startenden ausführbaren Datei zu übergeben. Für mit der Anwendung gelieferte Hilfsbinärdateien kann man einen solchen Pfad erstellen, der mit „ QCoreApplication::applicationDirPath “ () beginnt. Um explizit eine ausführbare Datei auszuführen, die relativ zu dem mit „ setWorkingDirectory “ () festgelegten Verzeichnis zu finden ist, verwenden Sie entsprechend einen Programmpfad, der je nach Fall mit „./“ oder „../“ beginnt.
Unter Windows ist die Endung „.exe“ in den meisten Fällen nicht erforderlich, außer in den in der CreateProcess- Dokumentation beschriebenen Fällen. Zudem wandelt QProcess die Unix-typischen Schrägstriche im Programmnamen in Windows-Pfad-Backslashes um. Dadurch lässt sich Code, der QProcess verwendet, plattformübergreifend schreiben, wie in den obigen Beispielen gezeigt.
QProcess unterstützt nicht die direkte Ausführung von integrierten Funktionen der Unix-Shell oder des Windows-Befehlsinterpreters, wie beispielsweise den Befehl „ dir “ von „ cmd.exe “ oder „ export “ der Bourne-Shell. Unter Unix werden viele integrierte Shell-Befehle zwar auch als separate ausführbare Dateien bereitgestellt, ihr Verhalten kann sich jedoch von dem der als integrierte Befehle implementierten unterscheiden. Um diese Befehle auszuführen, sollte man den Interpreter explizit mit den entsprechenden Optionen starten. Starten Sie auf Unix-Systemen „/bin/sh“ mit zwei Argumenten: „-c“ und einer Zeichenkette mit der auszuführenden Befehlszeile. Verwenden Sie unter Windows aufgrund der nicht standardmäßigen Art und Weise, wie „ cmd.exe “ seine Befehlszeile auswertet, „ setNativeArguments “ (z. B. „/c dir d:“).
Umgebungsvariablen
Die QProcess-API bietet Methoden zur Bearbeitung der Umgebungsvariablen, die dem Kindprozess zur Verfügung stehen. Standardmäßig erhält der Kindprozess eine Kopie der aktuellen Umgebungsvariablen des Prozesses, die zum Zeitpunkt des Aufrufs der Funktion „ start()“ vorhanden sind. Das bedeutet, dass alle Änderungen, die vor diesem Aufruf mit „ qputenv()“ vorgenommen wurden, in der Umgebung des Kindprozesses berücksichtigt werden. Beachten Sie, dass QProcess nicht versucht, Race-Conditions mit „ qputenv()“ in anderen Threads zu verhindern; daher wird empfohlen, „ qputenv()“ nach dem ersten Start der Anwendung zu vermeiden.
Die Umgebung für einen bestimmten Kindprozess kann mithilfe der Funktionen ` processEnvironment()` und ` setProcessEnvironment()` geändert werden, die die Klasse ` QProcessEnvironment ` verwenden. Standardmäßig gibt ` processEnvironment()` ein Objekt zurück, für das ` QProcessEnvironment::inheritsFromParent()` wahr ist. Das Festlegen einer Umgebung, die nicht vom Elternprozess geerbt wird, führt dazu, dass QProcess genau diese Umgebung für den Kindprozess verwendet, wenn dieser gestartet wird.
Das übliche Szenario beginnt mit der aktuellen Umgebung durch Aufruf von ` QProcessEnvironment::systemEnvironment()` und fährt dann mit dem Hinzufügen, Ändern oder Entfernen bestimmter Variablen fort. Die resultierende Variablenliste kann dann mit ` setProcessEnvironment()` auf einen `QProcess` angewendet werden.
Es ist möglich, alle Variablen aus der Umgebung zu entfernen oder mit einer leeren Umgebung zu beginnen, indem man den Standardkonstruktor von `QProcessEnvironment()` verwendet. Dies ist außerhalb kontrollierter und systemspezifischer Bedingungen nicht ratsam, da es Systemvariablen geben kann, die in der aktuellen Prozessumgebung gesetzt sind und für die ordnungsgemäße Ausführung des Kindprozesses erforderlich sind.
Unter Windows kopiert QProcess die Umgebungsvariablen ` "PATH" ` und ` "SystemRoot" ` des aktuellen Prozesses, sofern diese nicht gesetzt waren. Es ist nicht möglich, sie vollständig zu löschen, aber man kann sie auf leere Werte setzen. Das Setzen von ` "PATH" ` auf leer unter Windows führt wahrscheinlich dazu, dass der Kindprozess nicht gestartet werden kann.
Kommunikation über Kanäle
Prozesse verfügen über zwei vordefinierte Ausgabekanäle: Der Standardausgabekanal (stdout) liefert die reguläre Konsolenausgabe, und der Standardfehlerkanal (stderr) liefert in der Regel die vom Prozess ausgegebenen Fehlermeldungen. Diese Kanäle stellen zwei separate Datenströme dar. Sie können zwischen ihnen umschalten, indem Sie ` setReadChannel()` aufrufen. `QProcess` gibt ` readyRead()` aus, wenn Daten auf dem aktuellen Lesekanal verfügbar sind. Außerdem gibt es ` readyReadStandardOutput()` aus, wenn neue Standardausgabedaten verfügbar sind, und wenn neue Standardfehlerdaten verfügbar sind, wird ` readyReadStandardError()` ausgegeben. Anstatt read(), readLine() oder getChar() aufzurufen, können Sie alle Daten aus einem der beiden Kanäle explizit lesen, indem Sie readAllStandardOutput() oder readAllStandardError() aufrufen.
Die Bezeichnungen der Kanäle können irreführend sein. Beachten Sie, dass die Ausgabekanäle des Prozesses den Lesekanälen von QProcess entsprechen, während die Eingabekanäle des Prozesses den Schreibkanälen von QProcess entsprechen. Das liegt daran, dass das, was wir mit QProcess lesen, die Ausgabe des Prozesses ist, und das, was wir schreiben, zur Eingabe des Prozesses wird.
QProcess kann die beiden Ausgabekanäle zusammenführen, sodass sowohl die Standardausgabe als auch die Standardfehlerdaten des laufenden Prozesses den Standardausgabekanal nutzen. Rufen Sie vor dem Start des Prozesses „ setProcessChannelMode()“ mit dem Argument „ MergedChannels “ auf, um diese Funktion zu aktivieren. Sie haben außerdem die Möglichkeit, die Ausgabe des laufenden Prozesses an den aufrufenden Hauptprozess weiterzuleiten, indem Sie ` ForwardedChannels ` als Argument übergeben. Es ist auch möglich, nur einen der Ausgabekanäle weiterzuleiten – typischerweise würde man ` ForwardedErrorChannel` verwenden, aber es gibt auch ` ForwardedOutputChannel `. Beachten Sie, dass die Verwendung der Kanalweiterleitung in GUI-Anwendungen in der Regel keine gute Idee ist – Sie sollten Fehler stattdessen grafisch darstellen.
Bestimmte Prozesse benötigen spezielle Umgebungsvariablen, um zu funktionieren. Sie können Umgebungsvariablen für Ihren Prozess festlegen, indem Sie ` setProcessEnvironment()` aufrufen. Um ein Arbeitsverzeichnis festzulegen, rufen Sie ` setWorkingDirectory()` auf. Standardmäßig werden Prozesse im aktuellen Arbeitsverzeichnis des aufrufenden Prozesses ausgeführt.
Die Positionierung und die Z-Reihenfolge auf dem Bildschirm von Fenstern, die zu mit QProcess gestarteten GUI-Anwendungen gehören, werden vom zugrunde liegenden Fenstersystem gesteuert. Bei Qt-5-Anwendungen kann die Positionierung über die Befehlszeilenoption ` -qwindowgeometry ` festgelegt werden; X11-Anwendungen akzeptieren in der Regel die Befehlszeilenoption ` -geometry `.
API für synchrone Prozesse
QProcess stellt eine Reihe von Funktionen bereit, die den Einsatz ohne Ereignisschleife ermöglichen, indem der aufrufende Thread angehalten wird, bis bestimmte Signale ausgesendet werden:
- waitForStarted() wartet, bis der Prozess gestartet ist.
- waitForReadyRead() wartet, bis neue Daten auf dem aktuellen Lesekanal zum Lesen verfügbar sind.
- waitForBytesWritten() wartet, bis eine Datenladung an den Prozess geschrieben wurde.
- waitForFinished() wartet, bis der Prozess beendet ist.
Der Aufruf dieser Funktionen vom Hauptthread aus (dem Thread, der ` QApplication::exec()` aufruft) kann dazu führen, dass Ihre Benutzeroberfläche einfriert.
Das folgende Beispiel führt ` gzip ` aus, um die Zeichenkette „Qt rocks!“ ohne Ereignisschleife zu komprimieren:
QProcess gzip;
gzip.start("gzip", QStringList() << "-c");
if (!gzip.waitForStarted())
return false;
gzip.write("Qt rocks!");
gzip.closeWriteChannel();
if (!gzip.waitForFinished())
return false;
QByteArray result = gzip.readAll();Sicherheitshinweise
Behandeln Sie den Programmnamen, die Argumente, die Umgebung und das Arbeitsverzeichnis als böswillige Eingaben, sobald eines dieser Elemente aus einer nicht vertrauenswürdigen Quelle stammt (dem Netzwerk, einer nicht vertrauenswürdigen Datei, einer von anderen Benutzern gesteuerten Anwendung). Ein von QProcess gestarteter Prozess läuft mit den vollen Berechtigungen der aufrufenden Anwendung.
Auflösung des Programmnamens
Geben Sie nach Möglichkeit einen absoluten Pfad als Programmnamen an. Ein einfacher Dateiname wird unter Unix über die Umgebungsvariable „ PATH “ aufgelöst oder unter Windows anhand der Suchreihenfolge des Betriebssystems (die traditionell das aktuelle Verzeichnis sowie „ PATH “ umfasst), sodass ein Angreifer, der „ PATH “ manipulieren oder eine Datei in ein durchsuchtes Verzeichnis ablegen kann, selbst bestimmt, welche Binärdatei ausgeführt wird. Weitere Details zum Suchvorgang nach Binärdateien finden Sie unter Finding the Executable.
Umgang mit Argumenten
Übergeben Sie Argumente als separate Listenelemente über ` start()` oder ` setArguments()`; setzen Sie niemals eine einzelne Befehlszeichenfolge aus nicht vertrauenswürdigen Teilen zusammen. Unter Unix werden die Argumente unverändert als einzelne ` argv `-Einträge an den Prozess-Nachkommen übergeben, ohne dass eine Shell beteiligt ist; daher haben Zeichen wie ` &`, ` |`, ` ; ` oder ` $ ` keine besondere Bedeutung. Unter Windows führt QProcess die Argumente gemäß den Regeln der Win32-Funktion „ CommandLineToArgvW() “ in Anführungszeichen und mit Escape-Zeichen ein. In keinem der beiden Betriebssysteme verwendet QProcess automatisch die Shell.
Bei der Verwendung von splitCommand() und startCommand() ist zu beachten, dass sich deren Regeln zur Tokenisierung und Escape-Behandlung von denen der Windows- und POSIX-Shells unterscheiden. Falsch escaped Eingaben eröffnen die Möglichkeit einer Argumenteinfügung.
Starten von Shells und Batch-Dateien
Übergeben Sie unter Windows keine nicht vertrauenswürdigen Argumente an eine Batch-Datei (.bat oder .cmd) oder an cmd.exe. Verwenden Sie stattdessen vorzugsweise setNativeArguments() und führen Sie die Anführungszeichen und das Escaping selbst durch. QProcess setzt Argumente gemäß den Regeln von CommandLineToArgvW() in Anführungszeichen, aber cmd.exe analysiert seine Befehlszeile anders und empfängt die Shell-Metazeichen %, ^, &, |, <, >, ( und ) unescaped. Ein Argument wie args&calc.exe, das an ein „ .cmd “-Skript übergeben wird, führt daher calc.exe als zweiten Befehl aus. Beachten Sie, dass unter Windows alle Argumente intern zu einer einzigen Befehlszeichenfolge zusammengefasst werden, sodass selbst die separate Übergabe der Argumente wie process.start("file.cmd", {"args", "&calc.exe"}) das Problem nicht löst. Viele Tools installieren Batch-Skripte (zum Beispiel npm, yarn oder gradle -Wrapper), sodass leicht übersehen werden kann, dass es sich bei dem Ziel um eine Batch-Datei handelt.
Unter Unix können ähnliche Probleme auftreten, wenn man die Shell explizit startet – zum Beispiel process.start("/bin/sh", {"-c", "args&&malicious_binary"}) –; dann analysiert die Shell, nicht QProcess, die Zeichenfolge „ -c “ und weist „ && “, „ ; “, „ | “, Backticks und „ $() “ ihre übliche Bedeutung zu, genau wie es „ cmd.exe “ unter Windows tut. Hier führt das abschließende „ &&malicious_binary “ ein zweites Programm nach „ args “ aus, sodass das Zusammensetzen der Zeichenfolge „ -c “ aus nicht vertrauenswürdigen Eingaben eine Befehlsinjektion darstellt.
Siehe auch QBuffer, QFile und QTcpSocket.
Dokumentation zu Mitgliedstypen
QProcess::CreateProcessArgumentModifier
Hinweis: Diese `typedef`-Definition ist nur unter Windows auf Desktop-Computern verfügbar.
Unter Windows verwendet „ QProcess “ die Win32-API-Funktion „ CreateProcess “, um untergeordnete Prozesse zu starten. Während „ QProcess “ eine bequeme Möglichkeit bietet, Prozesse zu starten, ohne sich um plattformspezifische Details kümmern zu müssen, ist es in manchen Fällen wünschenswert, die an „ CreateProcess “ übergebenen Parameter fein abzustimmen. Dies geschieht durch die Definition einer „ CreateProcessArgumentModifier “-Funktion und deren Übergabe an „ setCreateProcessArgumentsModifier “.
Eine „ CreateProcessArgumentModifier “-Funktion nimmt einen Parameter entgegen: einen Zeiger auf eine „ CreateProcessArguments “-Struktur. Die Elemente dieser Struktur werden nach dem Aufruf der Funktion „ CreateProcessArgumentModifier “ an „ CreateProcess “ übergeben.
Das folgende Beispiel veranschaulicht, wie benutzerdefinierte Flags an ` CreateProcess` übergeben werden. Beim Starten eines Konsolenprozesses B aus einem Konsolenprozess A verwendet ` QProcess ` standardmäßig das Konsolenfenster von Prozess A für Prozess B. In diesem Beispiel wird stattdessen ein neues Konsolenfenster mit einem benutzerdefinierten Farbschema für den Kindprozess B erstellt.
QProcess process;
process.setCreateProcessArgumentsModifier([] (QProcess::CreateProcessArguments *args)
{
args->flags |= CREATE_NEW_CONSOLE;
args->startupInfo->dwFlags &= ~STARTF_USESTDHANDLES;
args->startupInfo->dwFlags |= STARTF_USEFILLATTRIBUTE;
args->startupInfo->dwFillAttribute = BACKGROUND_BLUE | FOREGROUND_RED
| FOREGROUND_INTENSITY;
});
process.start("C:\\Windows\\System32\\cmd.exe", QStringList() << "/k" << "title" << "The Child Process");Siehe auch „ QProcess::CreateProcessArguments “ und „ setCreateProcessArgumentsModifier()“.
enum QProcess::ExitStatus
Diese Enumeration beschreibt die verschiedenen Beendigungsstatus von QProcess.
| Konstante | Wert | Beschreibung |
|---|---|---|
QProcess::NormalExit | 0 | Der Prozess wurde normal beendet. |
QProcess::CrashExit | 1 | Der Prozess ist abgestürzt. |
Siehe auch exitStatus().
enum QProcess::InputChannelMode
Diese Enumeration beschreibt die Modi der Prozess-Eingangskanäle von QProcess. Übergeben Sie einen dieser Werte an setInputChannelMode(), um den aktuellen Schreibkanalmodus festzulegen.
| Konstante | Wert | Beschreibung |
|---|---|---|
QProcess::ManagedInputChannel | 0 | QProcess verwaltet die Eingabe des laufenden Prozesses. Dies ist der Standardmodus für den Eingabekanal von ` QProcess`. |
QProcess::ForwardedInputChannel | 1 | QProcess Leitet die Eingabe des Hauptprozesses an den laufenden Prozess weiter. Der Kindprozess liest seine Standardeingabe aus derselben Quelle wie der Hauptprozess. Beachten Sie, dass der Hauptprozess nicht versuchen darf, seine Standardeingabe zu lesen, während der Kindprozess läuft. |
Siehe auch ` setInputChannelMode()`.
enum QProcess::ProcessChannel
Diese Enumeration beschreibt die vom laufenden Prozess verwendeten Prozesskanäle. Übergeben Sie einen dieser Werte an ` setReadChannel()` um den aktuellen Lesekanal von ` QProcess` festzulegen.
| Konstante | Wert | Beschreibung |
|---|---|---|
QProcess::StandardOutput | 0 | Die Standardausgabe (stdout) des laufenden Prozesses. |
QProcess::StandardError | 1 | Die Standardfehlerausgabe (stderr) des laufenden Prozesses. |
Siehe auch setReadChannel().
enum QProcess::ProcessChannelMode
Diese Enumeration beschreibt die Modi der Prozessausgangskanäle von „ QProcess “. Übergeben Sie einen dieser Werte an die Funktion „ setProcessChannelMode()“, um den aktuellen Lese-Kanalmodus festzulegen.
| Konstante | Wert | Beschreibung |
|---|---|---|
QProcess::SeparateChannels | 0 | QProcess verwaltet die Ausgabe des laufenden Prozesses und speichert Standardausgabe- und Standardfehlerdaten in separaten internen Puffern. Sie können den aktuellen Lesekanal von „ QProcess “ auswählen, indem Sie ` setReadChannel()` aufrufen. Dies ist der Standardkanalmodus von „ QProcess “. |
QProcess::MergedChannels | 1 | QProcess Führt die Ausgabe des laufenden Prozesses mit dem Standardausgabekanal (stdout) zusammen. Der Standardfehlerkanal (stderr) erhält keine Daten. Die Standardausgabe- und Standardfehlerdaten des laufenden Prozesses werden miteinander vermischt. Bei abgetrennten Prozessen wird die zusammengeführte Ausgabe des laufenden Prozesses an den Hauptprozess weitergeleitet. |
QProcess::ForwardedChannels | 2 | QProcess leitet die Ausgabe des laufenden Prozesses an den Hauptprozess weiter. Alles, was der Kindprozess in seine Standardausgabe und seinen Standardfehler schreibt, wird in die Standardausgabe und den Standardfehler des Hauptprozesses geschrieben. |
QProcess::ForwardedErrorChannel | 4 | QProcess verwaltet die Standardausgabe des laufenden Prozesses, leitet jedoch dessen Standardfehler an den Hauptprozess weiter. Dies spiegelt die typische Verwendung von Befehlszeilentools als Filter wider, bei der die Standardausgabe an einen anderen Prozess oder eine Datei umgeleitet wird, während der Standardfehler zu Diagnosezwecken auf der Konsole ausgegeben wird. (Dieser Wert wurde in Qt 5.2 eingeführt.) |
QProcess::ForwardedOutputChannel | 3 | Ergänzend zu „ForwardedErrorChannel“. (Dieser Wert wurde in Qt 5.2 eingeführt.) Hinweis: Windows unterdrückt absichtlich die Ausgabe von reinen GUI-Anwendungen an vererbte Konsolen. Dies gilt nicht für Ausgaben, die in Dateien oder Pipes umgeleitet werden. Um die Ausgabe von reinen GUI-Anwendungen dennoch an die Konsole weiterzuleiten, müssen Sie SeparateChannels verwenden und die Weiterleitung selbst vornehmen, indem Sie die Ausgabe lesen und in die entsprechenden Ausgabekanäle schreiben. |
Siehe auch ` setProcessChannelMode()` ().
enum QProcess::ProcessError
Diese Enumeration beschreibt die verschiedenen Fehlertypen, die von QProcess gemeldet werden.
| Konstante | Wert | Beschreibung |
|---|---|---|
QProcess::FailedToStart | 0 | Der Prozess konnte nicht gestartet werden. Entweder fehlt das aufgerufene Programm, oder Sie verfügen möglicherweise nicht über ausreichende Berechtigungen oder Ressourcen, um das Programm aufzurufen. |
QProcess::Crashed | 1 | Der Prozess ist einige Zeit nach dem erfolgreichen Start abgestürzt. |
QProcess::Timedout | 2 | Die letzte waitFor...()-Funktion ist abgelaufen. Der Status von „ QProcess “ ist unverändert, und Sie können versuchen, waitFor...() erneut aufzurufen. |
QProcess::WriteError | 4 | Beim Versuch, in den Prozess zu schreiben, ist ein Fehler aufgetreten. Beispielsweise läuft der Prozess möglicherweise nicht oder hat seinen Eingabekanal geschlossen. |
QProcess::ReadError | 3 | Beim Versuch, aus dem Prozess zu lesen, ist ein Fehler aufgetreten. Möglicherweise läuft der Prozess beispielsweise nicht. |
QProcess::UnknownError | 5 | Es ist ein unbekannter Fehler aufgetreten. Dies ist der Standardrückgabewert von ` error()`. |
Siehe auch ` error()`.
enum QProcess::ProcessState
Diese Enumeration beschreibt die verschiedenen Zustände von „ QProcess “.
| Konstante | Wert | Beschreibung |
|---|---|---|
QProcess::NotRunning | 0 | Der Prozess läuft nicht. |
QProcess::Starting | 1 | Der Prozess wird gestartet, das Programm wurde jedoch noch nicht aufgerufen. |
QProcess::Running | 2 | Der Prozess läuft und ist bereit zum Lesen und Schreiben. |
Siehe auch ` state()`.
[since 6.6] enum class QProcess::UnixProcessFlag
flags QProcess::UnixProcessFlags
Diese Flags können im Feld „ flags “ unter UnixProcessParameters verwendet werden.
| Konstante | Wert | Beschreibung |
|---|---|---|
QProcess::UnixProcessFlag::CloseFileDescriptors | 0x0010 | Schließt alle Dateideskriptoren oberhalb des durch ` lowestFileDescriptorToClose` definierten Schwellenwerts und verhindert so, dass derzeit im Elternprozess geöffnete Deskriptoren versehentlich an den Kindprozess weitergegeben werden. Die Dateideskriptoren ` stdin`, ` stdout` und ` stderr ` werden niemals geschlossen. |
QProcess::UnixProcessFlag::CreateNewSession (since Qt 6.7) | 0x0040 | Startet eine neue Prozesssitzung durch Aufruf von ` setsid(2)`. Dadurch kann der Kindprozess länger bestehen bleiben als die Sitzung, in der sich der aktuelle Prozess befindet. Dies ist einer der Schritte, die ` startDetached()` ausführt, um das Abtrennen des Prozesses zu ermöglichen, und gehört zudem zu den Schritten, um einen Prozess zu daemonisieren. |
QProcess::UnixProcessFlag::DisconnectControllingTerminal (since Qt 6.7) | 0x0080 | Fordert an, dass der Prozess die Verbindung zu seinem steuernden Terminal trennt, falls er eines hat. Falls er keines hat, geschieht nichts. Prozesse, die noch mit einem steuernden Terminal verbunden sind, erhalten möglicherweise ein „Hang Up“-Signal (`SIGHUP`), wenn das Terminal geschlossen wird, oder eines der anderen Terminalsteuerungssignale (`SIGTSTP`, ` SIGTTIN`, ` SIGTTOU`). Beachten Sie, dass ein Prozess auf einigen Betriebssystemen die Verbindung zum steuernden Terminal nur trennen darf, wenn er der „Session Leader“ ist, was bedeutet, dass das Flag „ CreateNewSession “ erforderlich sein kann. Ebenso wie dieses Flag ist dies einer der Schritte, um einen Prozess als Daemon auszuführen. |
QProcess::UnixProcessFlag::IgnoreSigPipe | 0x0002 | Setzt das Signal „ SIGPIPE “ immer auf „ignoriert“ (SIG_IGN), selbst wenn das Flag „ ResetSignalHandlers “ gesetzt wurde. Standardmäßig würde ein Kindprozess, der versucht, in seine Standardausgabe oder Standardfehlerausgabe zu schreiben, nachdem der entsprechende Kanal mit ` QProcess::closeReadChannel()` geschlossen wurde, das Signal „ SIGPIPE “ erhalten und sofort beendet werden; mit diesem Flag schlägt der Schreibvorgang ohne Signal fehl und der Kindprozess kann die Ausführung fortsetzen. |
QProcess::UnixProcessFlag::ResetIds (since Qt 6.7) | 0x0100 | Löst alle noch bestehenden, effektiven Benutzer- oder Gruppen-IDs auf, die der aktuelle Prozess möglicherweise noch besitzt (siehe setuid(2) und setgid(2) sowie QCoreApplication::setSetuidAllowed()). Dies ist nützlich, wenn der aktuelle Prozess setuid oder setgid war und nicht möchte, dass der Kindprozess die erweiterten Berechtigungen beibehält. |
QProcess::UnixProcessFlag::ResetSignalHandlers | 0x0001 | Setzt alle Unix-Signal-Handler auf ihren Standardzustand zurück (d. h., übergibt SIG_DFL an signal(2)). Dieses Flag ist nützlich, um sicherzustellen, dass ignorierte Signale (SIG_IGN) das Verhalten des Kindprozesses nicht beeinflussen. |
QProcess::UnixProcessFlag::UseVFork | 0x0020 | Fordert an, dass ` QProcess ` ` vfork(2) ` zum Starten des Kindprozesses verwendet. Verwenden Sie dieses Flag, um anzugeben, dass die mit ` setChildProcessModifier()` festgelegte Callback-Funktion sicher auf der Kindseite eines ` vfork(2)` ausgeführt werden kann; das heißt, die Callback-Funktion ändert keine nicht-lokalen Variablen (weder direkt noch über von ihr aufgerufene Funktionen) und versucht auch nicht, mit dem Elternprozess zu kommunizieren. Es ist implementierungsabhängig, ob „ QProcess “ tatsächlich „ vfork(2) “ verwendet und ob „ vfork(2) “ sich von der Standardadresse „ fork(2) “ unterscheidet. |
QProcess::UnixProcessFlag::DisableCoreDumps (since Qt 6.9) | 0x0200 | Fordert an, dass „ QProcess “ Core-Dumps im untergeordneten Prozess deaktiviert. Dies ist nützlich, wenn die ausgeführte ausführbare Datei wahrscheinlich abstürzt, Benutzer und Betreuer jedoch kein Interesse daran haben, Fehlerberichte für diese Zustände zu erstellen (beispielsweise wenn es sich bei der ausführbaren Datei um einen Testprozess handelt). Diese Einstellung hat keinen Einfluss auf die Funktion „ exitStatus()“ des abgestürzten Prozesses. Sie wird umgesetzt, indem das weiche Limit für die Core-Dump-Größe auf Null gesetzt wird, was bedeutet, dass die Anwendung diese Änderung weiterhin rückgängig machen kann, indem sie den Wert auf einen Wert bis zum harten Limit erhöht. |
Diese Enumeration wurde in Qt 6.6 eingeführt.
Der Typ `UnixProcessFlags` ist ein `typedef` für ` QFlags<UnixProcessFlag>`. Er speichert eine OR-Kombination von `UnixProcessFlag`-Werten.
Siehe auch „ setUnixProcessParameters “ () und „ unixProcessParameters “ ().
Dokumentation zu den Mitgliedsfunktionen
[explicit] QProcess::QProcess(QObject *parent = nullptr)
Erstellt ein QProcess-Objekt mit dem angegebenen „ parent “.
[virtual noexcept] QProcess::~QProcess()
Löst das „ QProcess “-Objekt auf, d. h., beendet den Prozess.
Beachten Sie, dass diese Funktion erst dann zurückkehrt, wenn der Prozess beendet ist.
QStringList QProcess::arguments() const
Gibt die Befehlszeilenargumente zurück, mit denen der Prozess zuletzt gestartet wurde.
Siehe auch setArguments() und start().
[override virtual] qint64 QProcess::bytesToWrite() const
Implementiert: ` QIODevice::bytesToWrite()` const.
[since 6.0] std::function<void ()> QProcess::childProcessModifier() const
Gibt die zuvor durch den Aufruf von ` setChildProcessModifier()` festgelegte Modifikatorfunktion zurück.
Hinweis: Diese Funktion ist nur auf Unix-Plattformen verfügbar.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch „ setChildProcessModifier()“ und „ unixProcessParameters()“.
[override virtual] void QProcess::close()
Implementiert: QIODevice::close().
Beendet die gesamte Kommunikation mit dem Prozess und beendet diesen. Nach dem Aufruf dieser Funktion sendet „ QProcess “ keine „ readyRead()“-Meldungen mehr aus, und es können keine Daten mehr gelesen oder geschrieben werden.
void QProcess::closeReadChannel(QProcess::ProcessChannel channel)
Schließt den Lese-Kanal „ channel “. Nach dem Aufruf dieser Funktion empfängt „ QProcess “ keine Daten mehr über diesen Kanal. Bereits empfangene Daten stehen weiterhin zum Lesen zur Verfügung.
Rufen Sie diese Funktion auf, um Speicherplatz zu sparen, wenn Sie nicht an der Ausgabe des Prozesses interessiert sind.
Siehe auch closeWriteChannel() und setReadChannel().
void QProcess::closeWriteChannel()
Legt fest, dass der Schreibkanal von ` QProcess ` geschlossen wird. Der Kanal wird geschlossen, sobald alle Daten in den Prozess geschrieben wurden. Nach dem Aufruf dieser Funktion schlagen alle Versuche, in den Prozess zu schreiben, fehl.
Das Schließen des Schreibkanals ist für Programme erforderlich, die Eingabedaten so lange lesen, bis der Kanal geschlossen wurde. Das Programm „more“ wird beispielsweise sowohl unter Unix als auch unter Windows verwendet, um Textdaten in einer Konsole anzuzeigen. Es zeigt die Textdaten jedoch erst an, wenn der Schreibkanal von ` QProcess` geschlossen wurde. Beispiel:
QProcess more;
more.start("more");
more.write("Text to display");
more.closeWriteChannel();
// QProcess will emit readyRead() once "more" starts printingDer Schreibkanal wird implizit geöffnet, wenn start() aufgerufen wird.
Siehe auch closeReadChannel().
QProcess::CreateProcessArgumentModifier QProcess::createProcessArgumentsModifier() const
Gibt eine zuvor festgelegte Modifikatorfunktion für „ CreateProcess “ zurück.
Hinweis: Diese Funktion ist nur auf der Windows-Plattform verfügbar.
Siehe auch „ setCreateProcessArgumentsModifier()“ und „ QProcess::CreateProcessArgumentModifier “.
QProcess::ProcessError QProcess::error() const
Gibt den Typ des zuletzt aufgetretenen Fehlers zurück.
Siehe auch ` state()`.
[signal] void QProcess::errorOccurred(QProcess::ProcessError error)
Dieses Signal wird ausgegeben, wenn beim Prozess ein Fehler auftritt. Der angegebene Fehlercode „ error “ beschreibt die Art des aufgetretenen Fehlers.
[static] int QProcess::execute(const QString &program, const QStringList &arguments = {})
Startet das Programm „ program “ mit den Argumenten „ arguments “ in einem neuen Prozess, wartet, bis es beendet ist, und gibt anschließend den Beendigungscode des Prozesses zurück. Alle Daten, die der neue Prozess in die Konsole schreibt, werden an den aufrufenden Prozess weitergeleitet.
Die Umgebungsvariablen und das Arbeitsverzeichnis werden vom aufrufenden Prozess übernommen.
Die Argumentverarbeitung entspricht der jeweiligen Überladung von ` start()`.
Wenn der Prozess nicht gestartet werden kann, wird -2 zurückgegeben. Wenn der Prozess abstürzt, wird -1 zurückgegeben. Andernfalls wird der Beendigungscode des Prozesses zurückgegeben.
Siehe auch ` start()`.
int QProcess::exitCode() const
Gibt den Exit-Code des zuletzt beendeten Prozesses zurück.
Dieser Wert ist nur gültig, wenn ` exitStatus()` den Wert ` NormalExit` zurückgibt.
QProcess::ExitStatus QProcess::exitStatus() const
Gibt den Beendigungsstatus des zuletzt abgeschlossenen Prozesses zurück.
Unter Windows gibt diese Funktion auch dann „ NormalExit “ zurück, wenn der Prozess von einer anderen Anwendung mit `TerminateProcess()` beendet wurde, es sei denn, der Beendigungscode ist kleiner als 0.
[noexcept, since 6.7] void QProcess::failChildProcessModifier(const char *description, int error = 0)
Diese Funktionen können innerhalb des Modifikators mit „ setChildProcessModifier()“ verwendet werden, um anzuzeigen, dass ein Fehler aufgetreten ist. Wenn der Modifikator diese Funktionen aufruft, löst „ QProcess “ im übergeordneten Prozess „ errorOccurred()“ mit dem Code „ QProcess::FailedToStart “ aus. Die Funktion „ description “ kann verwendet werden, um Informationen in „ errorString()“ einzufügen, die bei der Diagnose des Problems helfen – in der Regel den Namen des fehlgeschlagenen Aufrufs, ähnlich wie bei der C-Bibliotheksfunktion „ perror() “. Zusätzlich kann der Parameter „ error “ einen „ <errno.h> “-Fehlercode sein, dessen Textform ebenfalls mitübermittelt wird.
Beispielsweise könnte ein Kind-Modifikator auf diese Weise einen zusätzlichen Dateideskriptor für den Kindprozess vorbereiten:
process.setChildProcessModifier([fd, &process]() {
if (dup2(fd, TargetFileDescriptor) < 0)
process.failChildProcessModifier(errno, "aux comm channel");
});
process.start();Dabei ist ` fd ` ein Dateideskriptor, der derzeit im Elternprozess geöffnet ist. Wenn der Systemaufruf ` dup2() ` zu einer ` EBADF `-Bedingung führte, könnte der Prozess ` errorString()` den Fehler „Child process modifier reported error: aux comm channel: Bad file descriptor“ melden.
Diese Funktion kehrt nicht zum Aufrufer zurück. Die Verwendung an einer anderen Stelle als im Kindprozess-Modifikator und ohne das korrekte ` QProcess `-Objekt führt zu undefiniertem Verhalten.
Hinweis: Die Implementierung begrenzt die Länge des Parameters ` description ` auf etwa 500 Zeichen. Der Text aus dem ` error `-Code wird dabei nicht mitgezählt.
Diese Funktion wurde in Qt 6.7 eingeführt.
Siehe auch ` setChildProcessModifier()` und ` setUnixProcessParameters()`.
[signal] void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus = NormalExit)
Dieses Signal wird ausgegeben, wenn der Prozess beendet wird. exitCode ist der Exit-Code des Prozesses (gilt nur für normale Beendigungen), und exitStatus ist der Exit-Status. Nach Beendigung des Prozesses sind die Puffer unter QProcess weiterhin intakt. Sie können weiterhin alle Daten lesen, die der Prozess vor seiner Beendigung möglicherweise geschrieben hat.
Siehe auch exitStatus().
QProcess::InputChannelMode QProcess::inputChannelMode() const
Gibt den Kanalmodus des Standardeingabekanals von „ QProcess “ zurück.
Siehe auch setInputChannelMode() und InputChannelMode.
[override virtual] bool QProcess::isSequential() const
Implementiert: ` QIODevice::isSequential()` const.
[slot] void QProcess::kill()
Beendet den aktuellen Prozess, wodurch dieser sofort beendet wird.
Unter Windows verwendet `kill()` die Funktion `TerminateProcess`, unter Unix und macOS wird das SIGKILL-Signal an den Prozess gesendet.
Siehe auch terminate().
QString QProcess::nativeArguments() const
Gibt die zusätzlichen nativen Befehlszeilenargumente für das Programm zurück.
Hinweis: Diese Funktion ist nur auf der Windows-Plattform verfügbar.
Siehe auch ` setNativeArguments()`.
[static] QString QProcess::nullDevice()
Das Null-Gerät des Betriebssystems.
Der zurückgegebene Dateipfad verwendet native Verzeichnistrennzeichen.
Siehe auch QProcess::setStandardInputFile(), QProcess::setStandardOutputFile() und QProcess::setStandardErrorFile().
[override virtual] bool QProcess::open(QIODeviceBase::OpenMode mode = ReadWrite)
Implementiert: ` QIODevice::open` (Modus `QIODeviceBase::OpenMode`).
Startet das durch ` setProgram()` festgelegte Programm mit den durch ` setArguments()` festgelegten Argumenten. Der OpenMode wird auf ` mode` gesetzt.
Diese Methode ist ein Alias für ` start()` und dient ausschließlich der vollständigen Implementierung der durch ` QIODevice` definierten Schnittstelle.
Gibt ` true ` zurück, wenn das Programm gestartet wurde.
Siehe auch start(), setProgram() und setArguments().
QProcess::ProcessChannelMode QProcess::processChannelMode() const
Gibt den Kanalmodus der Standardausgabe- und Standardfehlerkanäle von „ QProcess “ zurück.
Siehe auch setProcessChannelMode(), ProcessChannelMode und setReadChannel().
QProcessEnvironment QProcess::processEnvironment() const
Gibt die Umgebung zurück, die QProcess an seinen untergeordneten Prozess weitergibt. Wenn mit setProcessEnvironment() keine Umgebung festgelegt wurde, gibt diese Methode ein Objekt zurück, das angibt, dass die Umgebung vom übergeordneten Prozess geerbt wird.
Siehe auch setProcessEnvironment(), QProcessEnvironment::inheritsFromParent() und Environment variables.
qint64 QProcess::processId() const
Gibt die native Prozess-ID des laufenden Prozesses zurück, sofern verfügbar. Wenn derzeit kein Prozess läuft, wird „ 0 “ zurückgegeben.
QString QProcess::program() const
Gibt das Programm zurück, mit dem der Prozess zuletzt gestartet wurde.
Siehe auch setProgram() und start().
QByteArray QProcess::readAllStandardError()
Unabhängig vom aktuellen Lesekanal gibt diese Funktion alle Daten, die über den Standardfehler des Prozesses verfügbar sind, als „ QByteArray “ zurück.
Siehe auch readyReadStandardError(), readAllStandardOutput(), readChannel() und setReadChannel().
QByteArray QProcess::readAllStandardOutput()
Unabhängig vom aktuellen Lesekanal gibt diese Funktion alle Daten, die über die Standardausgabe des Prozesses verfügbar sind, als „ QByteArray “ zurück.
Siehe auch readyReadStandardOutput(), readAllStandardError(), readChannel() und setReadChannel().
QProcess::ProcessChannel QProcess::readChannel() const
Gibt den aktuell gelesenen Kanal des „ QProcess “ zurück.
Siehe auch setReadChannel().
[override virtual protected] qint64 QProcess::readData(char *data, qint64 maxlen)
Implementiert: QIODevice::readData(char *data, qint64 maxSize).
[private signal] void QProcess::readyReadStandardError()
Dieses Signal wird ausgesendet, wenn der Prozess über seinen Standard-Fehlerkanal (stderr) neue Daten bereitgestellt hat. Es wird unabhängig vom aktuellen Status „ read channel “ ausgesendet.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, kann jedoch nicht vom Benutzer ausgelöst werden.
Siehe auch readAllStandardError() und readChannel().
[private signal] void QProcess::readyReadStandardOutput()
Dieses Signal wird ausgesendet, wenn der Prozess über seinen Standardausgabekanal (stdout) neue Daten bereitgestellt hat. Es wird unabhängig vom aktuellen Wert von ` read channel` ausgesendet.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, kann jedoch nicht vom Benutzer ausgelöst werden.
Siehe auch readAllStandardOutput() und readChannel().
void QProcess::setArguments(const QStringList &arguments)
Legen Sie die „ arguments “ fest, die beim Starten des Prozesses an das aufgerufene Programm übergeben werden soll. Diese Funktion muss vor „ start()“ aufgerufen werden.
Siehe auch start(), setProgram() und arguments().
[since 6.0] void QProcess::setChildProcessModifier(const std::function<void ()> &modifier)
Legt die Funktion ` modifier ` für den Kindprozess fest, für Unix-Systeme (einschließlich macOS; für Windows siehe setCreateProcessArgumentsModifier()). Die im Argument ` modifier ` enthaltene Funktion wird im Kindprozess aufgerufen, nachdem ` fork() ` oder ` vfork() ` abgeschlossen wurde und ` QProcess ` die Standard-Dateideskriptoren für den Kindprozess eingerichtet hat, jedoch vor ` execve()`, innerhalb von ` start().
Im Folgenden wird ein Beispiel für die Einrichtung eines Kindprozesses gezeigt, der ohne Privilegien ausgeführt wird:
void runSandboxed(const QString &name, const QStringList &arguments)
{
QProcess proc;
proc.setChildProcessModifier([] {
// Drop all privileges in the child process, and enter
// a chroot jail.
::setgroups(0, nullptr);
::chroot("/run/safedir");
::chdir("/");
::setgid(safeGid);
::setuid(safeUid);
::umask(077);
});
proc.start(name, arguments);
proc.waitForFinished();
}Tritt bei der Modifikatorfunktion ein Fehler auf, kann sie mit ` failChildProcessModifier()` die Situation an den Aufrufer von ` QProcess ` melden. Alternativ kann sie andere Methoden zum Beenden des Prozesses verwenden, wie beispielsweise ` _exit()` oder ` abort()`.
Bestimmte Eigenschaften des Kindprozesses, wie das Schließen aller überflüssigen Dateideskriptoren oder das Trennen der Verbindung zum steuernden TTY, lassen sich leichter mit ` setUnixProcessParameters()` erreichen, da diese Funktion Fehler erkennen und einen ` FailedToStart `-Zustand melden kann. Der Modifikator ist nützlich, um bestimmte ungewöhnliche Eigenschaften des Kindprozesses zu ändern, wie zum Beispiel das Einrichten zusätzlicher Dateideskriptoren. Wenn sowohl ein Kindprozess-Modifikator als auch Unix-Prozessparameter gesetzt sind, wird der Modifikator ausgeführt, bevor diese Parameter angewendet werden.
Hinweis: In Multithread-Anwendungen muss bei dieser Funktion darauf geachtet werden, keine Funktionen aufzurufen, die Mutexe sperren könnten, die möglicherweise in anderen Threads verwendet werden (im Allgemeinen wird empfohlen, nur Funktionen zu verwenden, die von POSIX als „async-signal-safe“ definiert sind). Der Großteil der Qt-API ist innerhalb dieses Callbacks unsicher, einschließlich qDebug(), und kann zu Deadlocks führen.
Hinweis: Wenn das Flag `UnixProcessParameters::UseVFork` über ` setUnixProcessParameters()` gesetzt ist, verwendet ` QProcess ` möglicherweise die Semantik von ` vfork() ` zum Starten des Kindprozesses; daher muss diese Funktion noch strengere Einschränkungen beachten. Erstens darf sie, da sie sich den Speicher noch mit dem Elternprozess teilt, nicht in nicht-lokale Variablen schreiben und muss beim Lesen aus diesen die korrekte Reihenfolgesemantik einhalten, um Datenkonflikte zu vermeiden. Zweitens können sich noch mehr Bibliotheksfunktionen fehlerhaft verhalten; daher sollte diese Funktion ausschließlich auf Low-Level-Systemaufrufe zurückgreifen, wie beispielsweise read(), write(), setsid(), nice() und dergleichen.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch childProcessModifier(), failChildProcessModifier() und setUnixProcessParameters().
void QProcess::setCreateProcessArgumentsModifier(QProcess::CreateProcessArgumentModifier modifier)
Legt den Wert „ modifier “ für den Win32-API-Aufruf „ CreateProcess “ fest. Übergeben Sie „ QProcess::CreateProcessArgumentModifier() “, um einen zuvor festgelegten Wert zu entfernen.
Hinweis: Diese Funktion ist nur auf der Windows-Plattform verfügbar und erfordert C++11.
Siehe auch „ createProcessArgumentsModifier()“, „ QProcess::CreateProcessArgumentModifier “ und „ setChildProcessModifier()“.
void QProcess::setInputChannelMode(QProcess::InputChannelMode mode)
Legt den Kanalmodus des Standardeingabekanals von „ QProcess “ auf den angegebenen Wert „ mode “ fest. Dieser Modus wird beim nächsten Aufruf von „ start()“ verwendet.
Siehe auch inputChannelMode() und InputChannelMode.
void QProcess::setNativeArguments(const QString &arguments)
Legt zusätzliche native Befehlszeilen arguments en für das Programm fest.
Auf Betriebssystemen, bei denen die System-API zur Übergabe von Befehlszeilen arguments en an einen Unterprozess standardmäßig eine einzelne Zeichenkette verwendet, sind Befehlszeilen denkbar, die nicht über die portable, listenbasierte API von „ QProcess “ übergeben werden können. In solchen Fällen muss diese Funktion verwendet werden, um eine Zeichenkette festzulegen, die mit einem Leerzeichen als Trennzeichen an die aus der üblichen Argumentliste zusammengesetzte Zeichenkette angehängt wird.
Hinweis: Diese Funktion ist nur auf der Windows-Plattform verfügbar.
Siehe auch ` nativeArguments()`.
void QProcess::setProcessChannelMode(QProcess::ProcessChannelMode mode)
Legt den Kanalmodus der Standardausgabe- und Standardfehlerkanäle von ` QProcess ` auf den angegebenen Wert ` mode ` fest. Dieser Modus wird beim nächsten Aufruf von ` start()` verwendet. Beispiel:
QProcess builder;
builder.setProcessChannelMode(QProcess::MergedChannels);
builder.start("make", QStringList() << "-j2");
if (!builder.waitForFinished())
qDebug() << "Make failed:" << builder.errorString();
sonst
qDebug() << "Make output:" << builder.readAll();Siehe auch processChannelMode(), ProcessChannelMode und setReadChannel().
void QProcess::setProcessEnvironment(const QProcessEnvironment &environment)
Legt die Umgebungsvariable „ environment “ fest, die von „ QProcess “ an den untergeordneten Prozess übergeben wird.
Der folgende Code fügt beispielsweise die Umgebungsvariable ` TMPDIR` hinzu:
QProcess process;
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("TMPDIR", "C:\\MyApp\\temp"); // Add an environment variable
process.setProcessEnvironment(env);
process.start("myapp");Beachten Sie, dass bei Windows bei den Namen von Umgebungsvariablen die Groß-/Kleinschreibung keine Rolle spielt.
Siehe auch processEnvironment(), QProcessEnvironment::systemEnvironment() und Environment variables.
[protected] void QProcess::setProcessState(QProcess::ProcessState state)
Setzt den aktuellen Status des „ QProcess “ auf den angegebenen „ state “.
Siehe auch state().
void QProcess::setProgram(const QString &program)
Legen Sie die beim Starten des Prozesses zu verwendende „ program “ fest. Diese Funktion muss vor dem Aufruf von „ start()“ aufgerufen werden.
Wenn „ program “ ein absoluter Pfad ist, gibt er die genaue ausführbare Datei an, die gestartet wird. Relative Pfade werden plattformspezifisch aufgelöst, wozu auch die Suche in der Umgebungsvariablen „ PATH “ gehört (Einzelheiten finden Sie unter Finding the Executable ).
Siehe auch start(), setArguments(), program() und QStandardPaths::findExecutable().
void QProcess::setReadChannel(QProcess::ProcessChannel channel)
Setzt den aktuellen Lesekanal des „ QProcess “ auf den angegebenen „ channel “. Der aktuelle Eingangskanal wird von den Funktionen „ read()“, „ readAll()“, „ readLine()“ und „ getChar()“ verwendet. Er bestimmt außerdem, welcher Kanal „ QProcess “ dazu veranlasst, „ readyRead()“ auszugeben.
Siehe auch readChannel().
void QProcess::setStandardErrorFile(const QString &fileName, QIODeviceBase::OpenMode mode = Truncate)
Leitet die Standardfehlerausgabe des Prozesses in die Datei „ fileName “ um. Wenn die Umleitung aktiv ist, wird der Lesekanal für die Standardfehlerausgabe geschlossen: Der Lesevorgang mit „ read()“ schlägt stets fehl, ebenso wie „ readAllStandardError()“. Die Datei wird angehängt, wenn „ mode “ auf „Append“ gesetzt ist; andernfalls wird sie gekürzt.
Weitere Informationen darüber, wie die Datei geöffnet wird, finden Sie unter setStandardOutputFile().
Hinweis: Wenn setProcessChannelMode() mit dem Argument „ QProcess::MergedChannels “ aufgerufen wurde, hat diese Funktion keine Auswirkung.
Siehe auch setStandardInputFile(), setStandardOutputFile() und setStandardOutputProcess().
void QProcess::setStandardInputFile(const QString &fileName)
Leitet die Standardeingabe des Prozesses in die durch ` fileName` angegebene Datei um. Wenn eine Eingabeumleitung vorliegt, befindet sich das Objekt ` QProcess ` im schreibgeschützten Modus (der Aufruf von ` write()` führt zu einem Fehler).
Damit der Prozess sofort EOF liest, übergeben Sie hier ` nullDevice()`. Dies ist übersichtlicher als die Verwendung von ` closeWriteChannel()` vor dem Schreiben von Daten, da es bereits vor dem Start des Prozesses eingerichtet werden kann.
Wenn die Datei ` fileName ` zum Zeitpunkt des Aufrufs von ` start()` nicht existiert oder nicht lesbar ist, schlägt der Start des Prozesses fehl.
Der Aufruf von `setStandardInputFile()` nach dem Start des Prozesses hat keine Auswirkung.
Siehe auch setStandardOutputFile(), setStandardErrorFile() und setStandardOutputProcess().
void QProcess::setStandardOutputFile(const QString &fileName, QIODeviceBase::OpenMode mode = Truncate)
Leitet die Standardausgabe des Prozesses in die Datei „ fileName “ um. Sobald die Umleitung eingerichtet ist, wird der Lesekanal für die Standardausgabe geschlossen: Der Versuch, mit „ read()“ daraus zu lesen, schlägt stets fehl, ebenso wie der Versuch mit „ readAllStandardOutput()“.
Um die gesamte Standardausgabe des Prozesses zu verwerfen, übergeben Sie hier nullDevice(). Dies ist effizienter, als die Standardausgabe einfach nie zu lesen, da keine QProcess -Puffer gefüllt werden.
Wenn die Datei fileName zum Zeitpunkt des Aufrufs von start() noch nicht existiert, wird sie angelegt. Kann sie nicht angelegt werden, schlägt der Start fehl.
Wenn die Datei existiert und „ mode “ auf „ QIODeviceBase::Truncate “ gesetzt ist, wird die Datei gekürzt. Andernfalls (wenn „ mode “ auf „ QIODeviceBase::Append “ gesetzt ist) wird die Datei angehängt.
Der Aufruf von `setStandardOutputFile()` nach dem Start des Prozesses hat keine Auswirkung.
Ist fileName eine leere Zeichenkette, wird die Umleitung der Standardausgabe beendet. Dies ist nützlich, um die Standardausgabe nach einer Umleitung wiederherzustellen.
Siehe auch ` setStandardInputFile()`, ` setStandardErrorFile()` und ` setStandardOutputProcess()`.
void QProcess::setStandardOutputProcess(QProcess *destination)
Leitet den Standardausgabestrom dieses Prozesses an die Standardeingabe des Prozesses „ destination “ weiter.
Der folgende Shell-Befehl:
command1 | command2lässt sich mit „ QProcess “ mithilfe des folgenden Codes umsetzen:
QProcess process1;
QProcess process2;
process1.setStandardOutputProcess(&process2);
process1.start("command1");
process2.start("command2");[since 6.6] void QProcess::setUnixProcessParameters(const QProcess::UnixProcessParameters ¶ms)
Legt die zusätzlichen Einstellungen und Parameter für den Kindprozess auf Unix-Systemen auf „ params “ fest. Mit dieser Funktion kann „ QProcess “ angewiesen werden, den Kindprozess vor dem Start der Zielausführungsdatei anzupassen.
Diese Funktion kann verwendet werden, um bestimmte Eigenschaften des Kindprozesses zu ändern, wie z. B. das Schließen aller überflüssigen Dateideskriptoren, das Ändern des „nice“-Levels des Kindprozesses oder das Trennen der Verbindung zum steuernden TTY. Für eine feinere Steuerung des Kindprozesses oder um ihn auf andere Weise zu modifizieren, verwenden Sie die Funktion ` setChildProcessModifier()`. Wenn sowohl ein Kindprozess-Modifikator als auch Unix-Prozessparameter festgelegt sind, wird der Modifikator ausgeführt, bevor diese Parameter angewendet werden.
Hinweis: Diese Funktion ist nur auf Unix-Plattformen verfügbar.
Diese Funktion wurde in Qt 6.6 eingeführt.
Siehe auch „ unixProcessParameters()“ und „ setChildProcessModifier()“.
[since 6.6] void QProcess::setUnixProcessParameters(QProcess::UnixProcessFlags flagsOnly)
Legt die zusätzlichen Einstellungen für den untergeordneten Prozess auf Unix-Systemen auf „ flagsOnly “ fest. Dies entspricht der Überladung, bei der lediglich das Feld „ flags “ gesetzt ist.
Hinweis: Diese Funktion ist nur auf Unix-Plattformen verfügbar.
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.6 eingeführt.
Siehe auch ` unixProcessParameters()` und ` setChildProcessModifier()`.
void QProcess::setWorkingDirectory(const QString &dir)
Legt das Arbeitsverzeichnis auf „ dir “ fest. Mit dem Befehl „ QProcess “ wird der Prozess in diesem Verzeichnis gestartet. Standardmäßig wird der Prozess im Arbeitsverzeichnis des aufrufenden Prozesses gestartet.
Siehe auch workingDirectory() und start().
[static] QStringList QProcess::splitCommand(QStringView command)
Teilt die Zeichenkette „ command “ in eine Liste von Tokens auf und gibt die Liste zurück.
Token mit Leerzeichen können in doppelte Anführungszeichen gesetzt werden; drei aufeinanderfolgende doppelte Anführungszeichen stehen für das Anführungszeichen selbst.
void QProcess::start(const QString &program, const QStringList &arguments = {}, QIODeviceBase::OpenMode mode = ReadWrite)
Startet das angegebene „ program “ in einem neuen Prozess und übergibt dabei die Befehlszeilenargumente in „ arguments “. Informationen dazu, wie „ QProcess “ nach der auszuführenden ausführbaren Datei sucht, finden Sie unter „ setProgram()“. Der „OpenMode“ wird auf „ mode “ gesetzt. Es erfolgt keine weitere Aufteilung der Argumente.
Das ` QProcess `-Objekt wechselt sofort in den Zustand „Starting“. Wenn der Prozess erfolgreich gestartet wird, gibt ` QProcess ` das Signal ` started` () aus; andernfalls wird das Signal ` errorOccurred` () ausgegeben. Beachten Sie, dass auf Plattformen, die Kindprozesse synchron starten können (insbesondere Windows), diese Signale ausgegeben werden, bevor diese Funktion zurückkehrt, und dieses ` QProcess `-Objekt jeweils in den Zustand „ QProcess::Running “ oder „ QProcess::NotRunning “ übergeht. Auf anderen Plattformen werden die Signale „ started “ () und „ errorOccurred “ () verzögert ausgegeben.
Rufen Sie ` waitForStarted()` auf, um sicherzustellen, dass der Prozess gestartet wurde (oder der Start fehlgeschlagen ist) und diese Signale ausgesendet wurden. Es ist unbedenklich, diese Funktion aufzurufen, selbst wenn der Startstatus des Prozesses bereits bekannt ist, auch wenn das Signal in diesem Fall nicht erneut ausgesendet wird.
Windows: Die Argumente werden in Anführungszeichen gesetzt und zu einer Befehlszeile zusammengefügt, die mit der Windows-Funktion „ CommandLineToArgvW() “ kompatibel ist. Für Programme, die andere Anforderungen an die Befehlszeilen-Anführungszeichen stellen, müssen Sie „ setNativeArguments “ () verwenden. Ein bekanntes Programm, das die Regeln von „ CommandLineToArgvW() “ nicht befolgt, ist „cmd.exe“ und folglich alle Batch-Skripte.
Wenn das „ QProcess “-Objekt bereits einen Prozess ausführt, wird möglicherweise eine Warnung auf der Konsole ausgegeben, und der bestehende Prozess läuft unbeeinträchtigt weiter.
Hinweis: Ein erfolgreicher Start des Kindprozesses bedeutet lediglich, dass das Betriebssystem den Prozess erfolgreich erstellt und ihm die jedem Prozess zugewiesenen Ressourcen, wie beispielsweise seine Prozess-ID, zugewiesen hat. Der Kindprozess kann sehr früh abstürzen oder anderweitig fehlschlagen und somit nicht die erwartete Ausgabe erzeugen. Auf den meisten Betriebssystemen kann dies auch Fehler bei der dynamischen Verknüpfung beinhalten.
Siehe auch processId(), started(), waitForStarted() und setNativeArguments().
void QProcess::start(QIODeviceBase::OpenMode mode = ReadWrite)
Startet das mit ` setProgram()` festgelegte Programm mit den durch ` setArguments()` festgelegten Argumenten. Der OpenMode wird auf ` mode` gesetzt.
Dies ist eine überladene Funktion.
Siehe auch open(), setProgram() und setArguments().
[since 6.0] void QProcess::startCommand(const QString &command, QIODeviceBase::OpenMode mode = ReadWrite)
Startet den Befehl „ command “ in einem neuen Prozess. Der OpenMode wird auf „ mode “ gesetzt.
command ist eine einzelne Textzeichenfolge, die sowohl den Programmnamen als auch dessen Argumente enthält. Die Argumente werden durch ein oder mehrere Leerzeichen voneinander getrennt. Beispiel:
QProcess process;
process.startCommand("del /s *.txt");
// same as process.start("del", QStringList() << "/s" << "*.txt");
//...Argumente, die Leerzeichen enthalten, müssen in Anführungszeichen gesetzt werden, damit sie korrekt an den neuen Prozess übergeben werden. Beispiel:
QProcess process;
process.startCommand("dir \"My Documents\"");Literale Anführungszeichen in der Zeichenkette „ command “ werden durch dreifache Anführungszeichen dargestellt. Beispiel:
QProcess process;
process.startCommand("dir \"Epic 12\"\"\" Singles\"");Nachdem die Zeichenkette „ command “ aufgeteilt und aus den Anführungszeichen entfernt wurde, verhält sich diese Funktion wie „ start()“.
Auf Betriebssystemen, bei denen die System-API zur Übergabe von Befehlszeilenargumenten an einen Unterprozess nativ eine einzelne Zeichenkette verwendet (Windows), sind Befehlszeilen denkbar, die nicht über die portable, listenbasierte API von ` QProcess` übergeben werden können. In diesen seltenen Fällen müssen Sie anstelle dieser Funktion ` setProgram()` und ` setNativeArguments()` verwenden.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch splitCommand() und start().
bool QProcess::startDetached(qint64 *pid = nullptr)
Startet das mit ` setProgram()` festgelegte Programm mit den durch ` setArguments()` festgelegten Argumenten in einem neuen Prozess und trennt sich von diesem. Gibt bei Erfolg ` true ` zurück; andernfalls wird ` false` zurückgegeben. Wenn der aufrufende Prozess beendet wird, läuft der abgetrennte Prozess davon unbeeindruckt weiter.
Unix: Der gestartete Prozess läuft in einer eigenen Sitzung und verhält sich wie ein Daemon.
Der Prozess wird in dem Verzeichnis gestartet, das durch ` setWorkingDirectory()` festgelegt wurde. Ist ` workingDirectory()` leer, wird das Arbeitsverzeichnis vom aufrufenden Prozess übernommen.
Ist die Funktion erfolgreich, wird *pid auf die Prozess-ID des gestarteten Prozesses gesetzt; andernfalls wird sie auf -1 gesetzt. Beachten Sie, dass der Kindprozess beendet werden kann und die PID ohne Vorwarnung ungültig werden kann. Darüber hinaus kann dieselbe PID nach Beendigung des Kindprozesses wiederverwendet und von einem völlig anderen Prozess genutzt werden. Benutzercode sollte bei der Verwendung dieser Variablen vorsichtig sein, insbesondere wenn beabsichtigt wird, den Prozess mit Mitteln des Betriebssystems zwangsweise zu beenden.
Von startDetached() werden nur die folgenden Eigenschaftssetter unterstützt:
- setArguments()
- setCreateProcessArgumentsModifier()
- setNativeArguments()
- setProcessEnvironment()
- setProgram()
- setStandardErrorFile()
- setStandardInputFile()
- setStandardOutputFile()
- setProcessChannelMode(QProcess::MergedChannels)
- setStandardOutputProcess()
- setWorkingDirectory()
Alle anderen Eigenschaften des Objekts „ QProcess “ werden ignoriert.
Hinweis: Der aufgerufene Prozess erbt das Konsolenfenster des aufrufenden Prozesses. Um die Konsolenausgabe zu unterdrücken, leiten Sie die Standard- und Fehlerausgabe an ` QProcess::nullDevice()` um.
Siehe auch ` start()` und ` startDetached(const QString &program, const QStringList &arguments, const QString &workingDirectory, qint64 *pid)`.
[static] bool QProcess::startDetached(const QString &program, const QStringList &arguments = {}, const QString &workingDirectory = QString(), qint64 *pid = nullptr)
Startet das Programm „ program “ mit den Argumenten „ arguments “ in einem neuen Prozess und trennt sich von diesem. Gibt bei Erfolg „ true “ zurück; andernfalls wird „ false “ zurückgegeben. Wenn der aufrufende Prozess beendet wird, läuft der abgetrennte Prozess unbeeinträchtigt weiter.
Die Argumentverarbeitung entspricht der jeweiligen Überladung von ` start()`.
Der Prozess wird im Verzeichnis „ workingDirectory “ gestartet. Ist „ workingDirectory “ leer, wird das Arbeitsverzeichnis vom aufrufenden Prozess übernommen.
Ist die Funktion erfolgreich, wird *pid auf die Prozess-ID des gestarteten Prozesses gesetzt.
Diese Funktion überlädt QProcess::startDetached().
Siehe auch start().
[private signal] void QProcess::started()
Dieses Signal wird von „ QProcess “ ausgesendet, wenn der Prozess gestartet wurde und „ state()“ den Wert „ Running “ zurückgibt.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, kann jedoch nicht vom Benutzer ausgelöst werden.
QProcess::ProcessState QProcess::state() const
Gibt den aktuellen Status des Prozesses zurück.
Siehe auch stateChanged() und error().
[private signal] void QProcess::stateChanged(QProcess::ProcessState newState)
Dieses Signal wird immer dann ausgelöst, wenn sich der Zustand von „ QProcess “ ändert. Das Argument „ newState “ gibt den Zustand an, auf den „ QProcess “ geändert wurde.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, kann jedoch nicht vom Benutzer ausgelöst werden.
[static] QStringList QProcess::systemEnvironment()
Gibt die Systemumgebung des aufrufenden Prozesses als Liste von Schlüssel-Wert-Paaren zurück. Beispiel:
QStringList environment = QProcess::systemEnvironment();
// environment = {"PATH=/usr/bin:/usr/local/bin",
// "USER=greg", "HOME=/home/greg"}Diese Funktion speichert die Systemumgebung nicht im Cache. Daher ist es möglich, eine aktualisierte Version der Umgebung zu erhalten, wenn Low-Level-C-Bibliotheksfunktionen wie ` setenv ` oder ` putenv ` aufgerufen wurden.
Beachten Sie jedoch, dass wiederholte Aufrufe dieser Funktion die Liste der Umgebungsvariablen neu erstellen, was ein nicht trivialer Vorgang ist.
Hinweis: Für neuen Code wird empfohlen, QProcessEnvironment::systemEnvironment() zu verwenden.
Siehe auch QProcessEnvironment::systemEnvironment() und setProcessEnvironment().
[slot] void QProcess::terminate()
Versucht, den Prozess zu beenden.
Der Prozess wird durch den Aufruf dieser Funktion möglicherweise nicht beendet (er erhält die Möglichkeit, den Benutzer nach nicht gespeicherten Dateien usw. zu fragen).
Unter Windows sendet `terminate()` eine WM_CLOSE-Meldung an alle Fenster der obersten Ebene des Prozesses und anschließend an den Hauptthread des Prozesses selbst. Unter Unix und macOS wird das Signal ` SIGTERM ` gesendet.
Konsolenanwendungen unter Windows, die keine Ereignisschleife ausführen oder deren Ereignisschleife die WM_CLOSE-Meldung nicht verarbeitet, können nur durch den Aufruf von ` kill()` beendet werden.
Siehe auch kill().
[noexcept, since 6.6] QProcess::UnixProcessParameters QProcess::unixProcessParameters() const
Gibt das Objekt ` UnixProcessParameters ` zurück, das zusätzliche Flags und Einstellungen beschreibt, die auf Unix-Systemen auf den untergeordneten Prozess angewendet werden. Die Standardeinstellungen entsprechen einem standardmäßig konstruierten ` UnixProcessParameters`.
Hinweis: Diese Funktion ist nur auf Unix-Plattformen verfügbar.
Diese Funktion wurde in Qt 6.6 eingeführt.
Siehe auch ` setUnixProcessParameters()` und ` childProcessModifier()`.
[override virtual] bool QProcess::waitForBytesWritten(int msecs = 30000)
Implementiert: QIODevice::waitForBytesWritten(int msecs).
bool QProcess::waitForFinished(int msecs = 30000)
Hält an, bis der Prozess beendet ist und das Signal ` finished()` ausgelöst wurde, oder bis ` msecs ` Millisekunden verstrichen sind.
Gibt ` true ` zurück, wenn der Vorgang abgeschlossen ist; andernfalls gibt sie ` false ` zurück (wenn das Zeitlimit abgelaufen ist, ein Fehler aufgetreten ist oder diese ` QProcess ` bereits beendet ist).
Diese Funktion kann ohne Ereignisschleife ausgeführt werden. Sie ist nützlich beim Schreiben von Nicht-GUI-Anwendungen und bei der Durchführung von E/A-Operationen in einem Nicht-GUI-Thread.
Warnung: Der Aufruf dieser Funktion aus dem Haupt- (GUI-)Thread heraus kann dazu führen, dass Ihre Benutzeroberfläche einfriert.
Ist „msecs“ gleich -1, läuft diese Funktion ohne Zeitlimit ab.
Siehe auch finished(), waitForStarted(), waitForReadyRead() und waitForBytesWritten().
[override virtual] bool QProcess::waitForReadyRead(int msecs = 30000)
Implementiert: QIODevice::waitForReadyRead(int msecs).
bool QProcess::waitForStarted(int msecs = 30000)
Hält an, bis der Prozess gestartet wurde und das Signal „ started()“ ausgesendet wurde, oder bis msecs Millisekunden verstrichen sind.
Gibt „ true “ zurück, wenn der Prozess erfolgreich gestartet wurde; andernfalls wird „ false “ zurückgegeben (wenn das Zeitlimit abgelaufen ist oder ein Fehler aufgetreten ist). Wenn der Prozess bereits vor dem Aufruf dieser Funktion erfolgreich gestartet wurde, kehrt die Funktion sofort zurück.
Diese Funktion kann ohne Ereignisschleife ausgeführt werden. Sie ist nützlich beim Schreiben von Nicht-GUI-Anwendungen und bei der Durchführung von E/A-Operationen in einem Nicht-GUI-Thread.
Warnung: Der Aufruf dieser Funktion aus dem Haupt- (GUI-)Thread heraus kann dazu führen, dass Ihre Benutzeroberfläche einfriert.
Ist `msecs` gleich -1, läuft diese Funktion ohne Zeitlimit ab.
Siehe auch started(), waitForReadyRead(), waitForBytesWritten() und waitForFinished().
QString QProcess::workingDirectory() const
Wenn für ` QProcess ` ein Arbeitsverzeichnis zugewiesen wurde, gibt diese Funktion das Arbeitsverzeichnis zurück, in das die Funktion ` QProcess ` wechselt, bevor das Programm gestartet wird. Andernfalls (d. h., wenn kein Verzeichnis zugewiesen wurde) wird eine leere Zeichenkette zurückgegeben, und ` QProcess ` verwendet stattdessen das aktuelle Arbeitsverzeichnis der Anwendung.
Siehe auch ` setWorkingDirectory()`.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.