Auf dieser Seite

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

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 &params)
(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

void kill()
void terminate()

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:

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.

KonstanteWertBeschreibung
QProcess::NormalExit0Der Prozess wurde normal beendet.
QProcess::CrashExit1Der 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.

KonstanteWertBeschreibung
QProcess::ManagedInputChannel0QProcess verwaltet die Eingabe des laufenden Prozesses. Dies ist der Standardmodus für den Eingabekanal von ` QProcess`.
QProcess::ForwardedInputChannel1QProcess 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.

KonstanteWertBeschreibung
QProcess::StandardOutput0Die Standardausgabe (stdout) des laufenden Prozesses.
QProcess::StandardError1Die 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.

KonstanteWertBeschreibung
QProcess::SeparateChannels0QProcess 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::MergedChannels1QProcess 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::ForwardedChannels2QProcess 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::ForwardedErrorChannel4QProcess 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::ForwardedOutputChannel3Ergä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.

KonstanteWertBeschreibung
QProcess::FailedToStart0Der 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::Crashed1Der Prozess ist einige Zeit nach dem erfolgreichen Start abgestürzt.
QProcess::Timedout2Die letzte waitFor...()-Funktion ist abgelaufen. Der Status von „ QProcess “ ist unverändert, und Sie können versuchen, waitFor...() erneut aufzurufen.
QProcess::WriteError4Beim Versuch, in den Prozess zu schreiben, ist ein Fehler aufgetreten. Beispielsweise läuft der Prozess möglicherweise nicht oder hat seinen Eingabekanal geschlossen.
QProcess::ReadError3Beim Versuch, aus dem Prozess zu lesen, ist ein Fehler aufgetreten. Möglicherweise läuft der Prozess beispielsweise nicht.
QProcess::UnknownError5Es 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 “.

KonstanteWertBeschreibung
QProcess::NotRunning0Der Prozess läuft nicht.
QProcess::Starting1Der Prozess wird gestartet, das Programm wurde jedoch noch nicht aufgerufen.
QProcess::Running2Der 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.

KonstanteWertBeschreibung
QProcess::UnixProcessFlag::CloseFileDescriptors0x0010Schließ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)0x0040Startet 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)0x0080Fordert 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::IgnoreSigPipe0x0002Setzt 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)0x0100Lö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::ResetSignalHandlers0x0001Setzt 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::UseVFork0x0020Fordert 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)0x0200Fordert 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 printing

Der 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 | command2

lä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 &params)

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:

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.