En esta página

QProcess Class

La clase QProcess se utiliza para iniciar programas externos y para comunicarse con ellos. Más...

Cabecera: #include <QProcess>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Hereda: QIODevice

Nota: Todas las funciones de esta clase son reentrantes.

Tipos Públicos

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

Funciones Públicas

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

Funciones Públicas Reimplementadas

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

Ranuras Públicas

void kill()
void terminate()

Señales

void errorOccurred(QProcess::ProcessError error)
void finished(int exitCode, QProcess::ExitStatus exitStatus = NormalExit)
void readyReadStandardError()
void readyReadStandardOutput()
void started()
void stateChanged(QProcess::ProcessState newState)

Miembros públicos estáticos

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

Funciones protegidas

void setProcessState(QProcess::ProcessState state)

Funciones protegidas reimplementadas

virtual qint64 readData(char *data, qint64 maxlen) override

Descripción detallada

Ejecutar un proceso

Para iniciar un proceso, pase el nombre y los argumentos de la línea de comandos del programa que desea ejecutar como argumentos a start(). Los argumentos se suministran como cadenas individuales en QStringList.

Alternativamente, puede configurar el programa para que se ejecute con setProgram() y setArguments(), y luego llamar a start() o open().

Por ejemplo, el siguiente fragmento de código ejecuta el ejemplo del reloj analógico en el estilo Fusion en plataformas X11 pasando cadenas que contienen "-style" y "fusion" como dos elementos en la lista de argumentos:

    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 entra entonces en el estado Starting, y cuando el programa se ha iniciado, QProcess entra en el estado Running y emite started().

QProcess le permite tratar un proceso como un dispositivo de E/S secuencial. Puede escribir y leer del proceso de la misma manera que accedería a una conexión de red usando QTcpSocket. Puede escribir en la entrada estándar del proceso llamando a write(), y leer la salida estándar llamando a read(), readLine(), y getChar(). Debido a que hereda QIODevice, QProcess también puede ser usado como una fuente de entrada para QXmlReader, o para generar datos para ser cargados usando QNetworkAccessManager.

Cuando el proceso sale, QProcess vuelve a entrar en el estado NotRunning (el estado inicial), y emite finished().

La señal finished() proporciona el código de salida y el estado de salida del proceso como argumentos, y también se puede llamar a exitCode() para obtener el código de salida del último proceso que finalizó, y a exitStatus() para obtener su estado de salida. Si se produce un error en cualquier momento, QProcess emitirá la señal errorOccurred(). También puede llamar a error() para encontrar el tipo de error que se produjo por última vez, y a state() para encontrar el estado actual del proceso.

Nota: QProcess no es compatible con VxWorks, iOS, tvOS, o watchOS.

Encontrar el ejecutable

El programa a ejecutar puede establecerse llamando a setProgram() o directamente en la llamada a start(). El efecto de llamar a start() con el nombre del programa y los argumentos es equivalente a llamar a setProgram() y setArguments() antes de esa función y luego llamar a la sobrecarga sin esos parámetros.

QProcess interpreta el nombre del programa en una de tres formas diferentes, similar a como operan los shells de Unix y el intérprete de comandos de Windows en sus propias líneas de comando:

  • Si el nombre del programa es una ruta absoluta, entonces ese es el ejecutable exacto que se lanzará y QProcess no realiza ninguna búsqueda.
  • Si el nombre del programa es una ruta relativa con más de un componente de ruta (es decir, contiene al menos una barra), el directorio inicial donde se busca esa ruta relativa depende del sistema operativo: en Windows, es el directorio de trabajo actual del proceso padre, mientras que en Unix es el que se establece con setWorkingDirectory().
  • Si el nombre del programa es un nombre de archivo sin barras, el comportamiento depende del sistema operativo. En sistemas Unix, QProcess buscará en la variable de entorno PATH; en Windows, la búsqueda la realiza el sistema operativo y buscará primero en el directorio actual del proceso padre antes que en la variable de entorno PATH (consulte la documentación de CreateProcess para ver la lista completa).

Para evitar un comportamiento dependiente de la plataforma o cualquier problema con la forma en que se lanzó la aplicación actual, es aconsejable pasar siempre una ruta absoluta al ejecutable que se va a lanzar. Para los binarios auxiliares enviados con la aplicación, se puede construir dicha ruta comenzando por QCoreApplication::applicationDirPath(). Del mismo modo, para ejecutar explícitamente un ejecutable que debe encontrarse en relación con el directorio establecido con setWorkingDirectory(), utilice una ruta de programa que comience por "./" o "../" según el caso.

En Windows, el sufijo ".exe" no es necesario para la mayoría de los usos, excepto los descritos en la documentación de CreateProcess. Además, QProcess convertirá las barras inclinadas del estilo Unix en barras invertidas de la ruta de Windows para el nombre del programa. Esto permite que el código que utiliza QProcess se escriba de manera multiplataforma, como se muestra en los ejemplos anteriores.

QProcess no admite la ejecución directa de funciones integradas del intérprete de comandos de Unix o Windows, como el comando dir de cmd.exe o export del intérprete de comandos Bourne. En Unix, aunque muchos shell built-ins también se proporcionan como ejecutables separados, su comportamiento puede diferir de los implementados como built-ins. Para ejecutar esos comandos, hay que ejecutar explícitamente el intérprete con las opciones adecuadas. Para sistemas Unix, ejecute "/bin/sh" con dos argumentos: "-c" y una cadena con la línea de comandos a ejecutar. Para Windows, debido a la forma no estándar en que cmd.exe analiza su línea de comandos, utilice setNativeArguments() (por ejemplo, "/c dir d:").

Variables de entorno

La API de QProcess ofrece métodos para manipular las variables de entorno que verá el proceso hijo. Por defecto, el proceso hijo tendrá una copia de las variables de entorno del proceso actual que existen en el momento en que se llama a la función start(). Esto significa que cualquier modificación realizada usando qputenv() antes de esa llamada se reflejará en el entorno del proceso hijo. Nótese que QProcess no intenta prevenir condiciones de carrera con qputenv() ocurriendo en otros hilos, por lo que se recomienda evitar qputenv() después del arranque inicial de la aplicación.

El entorno para un hijo específico puede ser modificado usando las funciones processEnvironment() y setProcessEnvironment(), que usan la clase QProcessEnvironment. Por defecto, processEnvironment() devolverá un objeto para el que QProcessEnvironment::inheritsFromParent() sea verdadero. Establecer un entorno que no hereda del padre hará que QProcess utilice exactamente ese entorno para el hijo cuando se inicie.

El escenario normal comienza desde el entorno actual llamando a QProcessEnvironment::systemEnvironment() y luego procede a agregar, cambiar o eliminar variables específicas. La lista de variables resultante puede entonces aplicarse a un QProcess con setProcessEnvironment().

Es posible remover todas las variables del ambiente o comenzar desde un ambiente vacío, usando el constructor por defecto QProcessEnvironment(). Esto no es aconsejable fuera de condiciones controladas y específicas del sistema, ya que puede haber variables del sistema que se establecen en el entorno del proceso actual y son necesarias para la correcta ejecución del proceso hijo.

En Windows, QProcess copiará las variables de entorno del proceso actual "PATH" y "SystemRoot" si no están establecidas. No es posible desestablecerlas completamente, pero es posible establecerlas con valores vacíos. Establecer "PATH" como vacío en Windows probablemente causará que el proceso hijo falle al iniciarse.

Comunicación a través de canales

Los procesos tienen dos canales de salida predefinidos: El canal de salida estándar (stdout) suministra la salida normal de la consola, y el canal de error estándar (stderr) normalmente suministra los errores que imprime el proceso. Estos canales representan dos flujos de datos separados. Puedes alternar entre ellos llamando a setReadChannel(). QProcess emite readyRead() cuando hay datos disponibles en el canal de lectura actual. También emite readyReadStandardOutput() cuando hay nuevos datos de salida estándar disponibles, y cuando hay nuevos datos de error estándar disponibles, se emite readyReadStandardError(). En lugar de llamar a read(), readLine(), o getChar(), puede leer explícitamente todos los datos de cualquiera de los dos canales llamando a readAllStandardOutput() o readAllStandardError().

La terminología de los canales puede inducir a error. Ten en cuenta que los canales de salida del proceso corresponden a los canales de lectura de QProcess, mientras que los canales de entrada del proceso corresponden a los canales de escritura de QProcess. Esto se debe a que lo que leemos usando QProcess es la salida del proceso, y lo que escribimos se convierte en la entrada del proceso.

QProcess puede combinar los dos canales de salida, de modo que la salida estándar y los datos de error estándar del proceso en ejecución utilicen ambos el canal de salida estándar. Llame a setProcessChannelMode() con MergedChannels antes de iniciar el proceso para activar esta característica. También tiene la opción de reenviar la salida del proceso en ejecución al proceso principal llamante, pasando ForwardedChannels como argumento. También es posible reenviar sólo uno de los canales de salida - normalmente se usaría ForwardedErrorChannel, pero también existe ForwardedOutputChannel. Tenga en cuenta que usar el reenvío de canales es normalmente una mala idea en aplicaciones GUI - debería presentar los errores gráficamente en su lugar.

Ciertos procesos necesitan una configuración de entorno especial para funcionar. Puedes establecer variables de entorno para tu proceso llamando a setProcessEnvironment(). Para establecer un directorio de trabajo, llame a setWorkingDirectory(). Por defecto, los procesos se ejecutan en el directorio de trabajo actual del proceso que los llama.

El posicionamiento y el orden Z de la pantalla de las ventanas pertenecientes a aplicaciones GUI iniciadas con QProcess son controladas por el sistema de ventanas subyacente. Para aplicaciones Qt 5, el posicionamiento puede especificarse usando la opción de línea de comandos -qwindowgeometry; las aplicaciones X11 generalmente aceptan una opción de línea de comandos -geometry.

API de proceso síncrono

QProcess proporciona un conjunto de funciones que permiten su uso sin un bucle de eventos, suspendiendo el hilo de llamada hasta que se emitan ciertas señales:

  • waitForStarted() bloquea hasta que el proceso se haya iniciado.
  • waitForReadyRead() bloquea hasta que haya nuevos datos disponibles para lectura en el canal de lectura actual.
  • waitForBytesWritten() se bloquea hasta que se ha escrito una carga de datos en el proceso.
  • waitForFinished() se bloquea hasta que el proceso finaliza.

Llamar a estas funciones desde el hilo principal (el hilo que llama a QApplication::exec()) puede causar que su interfaz de usuario se congele.

El siguiente ejemplo ejecuta gzip para comprimir la cadena "¡Qt rocks!", sin un bucle de eventos:

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

Ver también QBuffer, QFile, y QTcpSocket.

Documentación de tipos de miembros

QProcess::CreateProcessArgumentModifier

Nota: Este typedef sólo está disponible en Windows de escritorio.

En Windows, QProcess utiliza la función de la API Win32 CreateProcess para iniciar procesos hijo. Aunque QProcess proporciona una forma cómoda de iniciar procesos sin preocuparse por los detalles de la plataforma, en algunos casos es deseable ajustar los parámetros que se pasan a CreateProcess. Esto se hace definiendo una función CreateProcessArgumentModifier y pasándosela a setCreateProcessArgumentsModifier.

Una función CreateProcessArgumentModifier recibe un parámetro: un puntero a una estructura CreateProcessArguments. Los miembros de esta estructura se pasarán a CreateProcess después de llamar a la función CreateProcessArgumentModifier.

El siguiente ejemplo demuestra cómo pasar banderas personalizadas a CreateProcess. Cuando se inicia un proceso de consola B desde un proceso de consola A, QProcess reutilizará la ventana de consola del proceso A para el proceso B por defecto. En este ejemplo, en cambio, se crea una nueva ventana de consola con un esquema de colores personalizado para el proceso hijo B.

    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");

Véase también QProcess::CreateProcessArguments y setCreateProcessArgumentsModifier().

enum QProcess::ExitStatus

Este enum describe los diferentes estados de salida de QProcess.

ConstanteValorDescripción
QProcess::NormalExit0El proceso sale normalmente.
QProcess::CrashExit1El proceso se ha bloqueado.

Véase también exitStatus().

enum QProcess::InputChannelMode

Este enum describe los modos de canal de entrada de proceso de QProcess. Pase uno de estos valores a setInputChannelMode() para establecer el modo de canal de escritura actual.

ConstanteValorDescripción
QProcess::ManagedInputChannel0QProcess gestiona la entrada del proceso en ejecución. Este es el modo de canal de entrada por defecto de QProcess.
QProcess::ForwardedInputChannel1QProcess reenvía la entrada del proceso principal al proceso en ejecución. El proceso hijo lee su entrada estándar de la misma fuente que el proceso principal. Tenga en cuenta que el proceso principal no debe intentar leer su entrada estándar mientras el proceso hijo está en ejecución.

Véase también setInputChannelMode().

enum QProcess::ProcessChannel

Este enum describe los canales de proceso utilizados por el proceso en ejecución. Pase uno de estos valores a setReadChannel() para establecer el canal de lectura actual de QProcess.

ConstanteValorDescripción
QProcess::StandardOutput0La salida estándar (stdout) del proceso en ejecución.
QProcess::StandardError1El error estándar (stderr) del proceso en ejecución.

Véase también setReadChannel().

enum QProcess::ProcessChannelMode

Este enum describe los modos de canal de salida de proceso de QProcess. Pase uno de estos valores a setProcessChannelMode() para establecer el modo de canal de lectura actual.

ConstanteValorDescripción
QProcess::SeparateChannels0QProcess gestiona la salida del proceso en ejecución, manteniendo los datos de salida estándar y error estándar en buffers internos separados. Puede seleccionar el canal de lectura actual de QProcess llamando a setReadChannel(). Este es el modo de canal por defecto de QProcess.
QProcess::MergedChannels1QProcess fusiona la salida del proceso en ejecución en el canal de salida estándar (stdout). El canal de error estándar (stderr) no recibirá ningún dato. La salida estándar y los datos de error estándar del proceso en ejecución se intercalan. Para procesos separados, la salida combinada del proceso en ejecución se reenvía al proceso principal.
QProcess::ForwardedChannels2QProcess reenvía la salida del proceso en ejecución al proceso principal. Todo lo que el proceso hijo escriba en su salida estándar y error estándar se escribirá en la salida estándar y error estándar del proceso principal.
QProcess::ForwardedErrorChannel4QProcess gestiona la salida estándar del proceso en ejecución, pero reenvía su error estándar al proceso principal. Esto refleja el uso típico de las herramientas de línea de comandos como filtros, donde la salida estándar se redirige a otro proceso o a un archivo, mientras que el error estándar se imprime en la consola con fines de diagnóstico. (Este valor se introdujo en Qt 5.2.)
QProcess::ForwardedOutputChannel3Complementario a ForwardedErrorChannel. (Este valor se introdujo en Qt 5.2.)

Nota: Windows suprime intencionadamente la salida de aplicaciones sólo GUI a consolas heredadas. Esto no se aplica a la salida redirigida a archivos o tuberías. Para redirigir la salida de aplicaciones sólo GUI en la consola no obstante, debe usar SeparateChannels y hacer el redireccionamiento usted mismo leyendo la salida y escribiéndola en los canales de salida apropiados.

Véase también setProcessChannelMode().

enum QProcess::ProcessError

Este enum describe los diferentes tipos de errores que son reportados por QProcess.

ConstanteValorDescripción
QProcess::FailedToStart0El proceso no ha podido iniciarse. O bien falta el programa invocado, o bien no tiene suficientes permisos o recursos para invocar el programa.
QProcess::Crashed1El proceso falló algún tiempo después de iniciarse con éxito.
QProcess::Timedout2La última función waitFor...() expiró. El estado de QProcess no ha cambiado y puede intentar llamar de nuevo a waitFor...().
QProcess::WriteError4Se ha producido un error al intentar escribir en el proceso. Por ejemplo, el proceso puede no estar ejecutándose, o puede haber cerrado su canal de entrada.
QProcess::ReadError3Se ha producido un error al intentar leer del proceso. Por ejemplo, puede que el proceso no se esté ejecutando.
QProcess::UnknownError5Se ha producido un error desconocido. Este es el valor de retorno por defecto de error().

Véase también error().

enum QProcess::ProcessState

Este enum describe los diferentes estados de QProcess.

ConstanteValorDescripción
QProcess::NotRunning0El proceso no se está ejecutando.
QProcess::Starting1El proceso se está iniciando, pero el programa aún no ha sido invocado.
QProcess::Running2El proceso se está ejecutando y está listo para leer y escribir.

Ver también state().

[since 6.6] enum class QProcess::UnixProcessFlag
flags QProcess::UnixProcessFlags

Estas banderas pueden usarse en el campo flags de UnixProcessParameters.

ConstanteValorDescripción
QProcess::UnixProcessFlag::CloseFileDescriptors0x0010Cierra todos los descriptores de archivo por encima del umbral definido por lowestFileDescriptorToClose, evitando que cualquier descriptor actualmente abierto en el proceso padre se filtre accidentalmente al hijo. Los descriptores de archivo stdin, stdout, y stderr nunca se cierran.
QProcess::UnixProcessFlag::CreateNewSession (since Qt 6.7)0x0040Inicia una nueva sesión de proceso, llamando a setsid(2). Esto permite que el proceso hijo sobreviva a la sesión en la que se encuentra el proceso actual. Este es uno de los pasos que startDetached() toma para permitir que el proceso se desconecte, y es también uno de los pasos para daemonizar un proceso.
QProcess::UnixProcessFlag::DisconnectControllingTerminal (since Qt 6.7)0x0080Solicita que el proceso se desconecte de su terminal de control, si tiene una. Si no lo tiene, no ocurre nada. Los procesos aún conectados a una terminal de control pueden recibir una señal de Colgar (SIGHUP) si la terminal se cierra, o una de las otras señales de control de terminal (SIGTSTP, SIGTTIN, SIGTTOU). Tenga en cuenta que en algunos sistemas operativos, un proceso sólo puede desconectarse de la terminal de control si es el líder de la sesión, lo que significa que la bandera CreateNewSession puede ser necesaria. Al igual, este es uno de los pasos para daemonizar un proceso.
QProcess::UnixProcessFlag::IgnoreSigPipe0x0002Siempre establece la señal SIGPIPE como ignorada (SIG_IGN), incluso si la bandera ResetSignalHandlers fue establecida. Por defecto, si el hijo intenta escribir en su salida estándar o error estándar después de que el canal respectivo se cerrara con QProcess::closeReadChannel(), recibiría la señal SIGPIPE y terminaría inmediatamente; con esta bandera, la operación de escritura falla sin señal y el hijo puede continuar ejecutándose.
QProcess::UnixProcessFlag::ResetIds (since Qt 6.7)0x0100Elimina cualquier ID de usuario o grupo efectivo retenido que el proceso actual todavía pueda tener (ver setuid(2) y setgid(2), además de QCoreApplication::setSetuidAllowed()). Esto es útil si el proceso actual fue setuid o setgid y no desea que el proceso hijo retenga los privilegios elevados.
QProcess::UnixProcessFlag::ResetSignalHandlers0x0001Restablece todos los manejadores de señales Unix a su estado por defecto (es decir, pasa SIG_DFL a signal(2)). Esta bandera es útil para asegurar que cualquier señal ignorada (SIG_IGN) no afecte el comportamiento del proceso hijo.
QProcess::UnixProcessFlag::UseVFork0x0020Solicita que QProcess utilice vfork(2) para iniciar el proceso hijo. Utilice esta bandera para indicar que la función de llamada de retorno establecida con setChildProcessModifier() es segura para ejecutarse en el lado hijo de un vfork(2); es decir, la llamada de retorno no modifica ninguna variable no local (directamente o a través de cualquier función a la que llame), ni intenta comunicarse con el proceso padre. Está definido por la implementación si QProcess utilizará realmente vfork(2) y si vfork(2) es diferente del estándar fork(2).
QProcess::UnixProcessFlag::DisableCoreDumps (since Qt 6.9)0x0200Solicita que QProcess deshabilite los volcados de núcleo en el proceso hijo. Esto es útil si es probable que el ejecutable que se está ejecutando se bloquee, pero los usuarios y mantenedores no van a estar interesados en generar informes de errores para esas condiciones (por ejemplo, el ejecutable es un proceso de prueba). Esta configuración no afecta a exitStatus() del proceso que se ha bloqueado. Se implementa estableciendo el límite suave del recurso de tamaño de volcado del núcleo a cero, lo que significa que la aplicación aún puede revertir este cambio aumentándolo a un valor hasta el límite duro.

Este enum fue introducido en Qt 6.6.

El tipo UnixProcessFlags es un typedef para QFlags<UnixProcessFlag>. Almacena una combinación OR de valores UnixProcessFlag.

Véase también setUnixProcessParameters() y unixProcessParameters().

Documentación de Funciones Miembro

[explicit] QProcess::QProcess(QObject *parent = nullptr)

Construye un objeto QProcess con la dirección parent.

[virtual noexcept] QProcess::~QProcess()

Destruye el objeto QProcess, es decir, mata el proceso.

Tenga en cuenta que esta función no regresará hasta que el proceso haya terminado.

QStringList QProcess::arguments() const

Devuelve los argumentos de línea de comandos con los que se inició el proceso por última vez.

Véase también setArguments() y start().

[override virtual] qint64 QProcess::bytesToWrite() const

Reimplementa: QIODevice::bytesToWrite() const.

[since 6.0] std::function<void ()> QProcess::childProcessModifier() const

Devuelve la función modificadora establecida previamente llamando a setChildProcessModifier().

Nota: Esta función sólo está disponible en plataformas Unix.

Esta función se introdujo en Qt 6.0.

Véase también setChildProcessModifier() y unixProcessParameters().

[override virtual] void QProcess::close()

Reimplementa: QIODevice::close().

Cierra toda comunicación con el proceso y lo mata. Después de llamar a esta función, QProcess ya no emitirá readyRead(), y ya no se podrán leer ni escribir datos.

void QProcess::closeReadChannel(QProcess::ProcessChannel channel)

Cierra el canal de lectura channel. Después de llamar a esta función, QProcess dejará de recibir datos en el canal. Cualquier dato que ya haya sido recibido seguirá estando disponible para su lectura.

Llama a esta función para ahorrar memoria, si no estás interesado en la salida del proceso.

Ver también closeWriteChannel() y setReadChannel().

void QProcess::closeWriteChannel()

Programa el cierre del canal de escritura de QProcess. El canal se cerrará una vez que todos los datos hayan sido escritos en el proceso. Después de llamar a esta función, cualquier intento de escribir al proceso fallará.

Cerrar el canal de escritura es necesario para programas que leen datos de entrada hasta que el canal ha sido cerrado. Por ejemplo, el programa "more" se utiliza para mostrar datos de texto en una consola tanto en Unix como en Windows. Pero no mostrará los datos de texto hasta que el canal de escritura de QProcess se haya cerrado. Ejemplo:

QProcess more;
more.start("more");
more.write("Text to display");
more.closeWriteChannel();
// QProcess will emit readyRead() once "more" starts printing

El canal de escritura se abre implícitamente cuando se llama a start().

Véase también closeReadChannel().

QProcess::CreateProcessArgumentModifier QProcess::createProcessArgumentsModifier() const

Devuelve una función modificadora de CreateProcess previamente establecida.

Nota: Esta función sólo está disponible en la plataforma Windows.

Véase también setCreateProcessArgumentsModifier() y QProcess::CreateProcessArgumentModifier.

QProcess::ProcessError QProcess::error() const

Devuelve el tipo de error que se ha producido en último lugar.

Véase también state().

[signal] void QProcess::errorOccurred(QProcess::ProcessError error)

Esta señal se emite cuando se produce un error en el proceso. El error especificado describe el tipo de error que se ha producido.

[static] int QProcess::execute(const QString &program, const QStringList &arguments = {})

Inicia el programa program con los argumentos arguments en un nuevo proceso, espera a que termine y devuelve el código de salida del proceso. Cualquier dato que el nuevo proceso escriba en la consola es reenviado al proceso llamante.

El entorno y el directorio de trabajo se heredan del proceso de llamada.

El tratamiento de los argumentos es idéntico al de la sobrecarga start().

Si el proceso no puede iniciarse, se devuelve -2. Si el proceso falla, se devuelve -1. En caso contrario, se devuelve el código de salida del proceso.

Véase también start().

int QProcess::exitCode() const

Devuelve el código de salida del último proceso que finalizó.

Este valor no es válido a menos que exitStatus() devuelva NormalExit.

QProcess::ExitStatus QProcess::exitStatus() const

Devuelve el estado de salida del último proceso que finalizó.

En Windows, si el proceso finalizó con TerminateProcess() desde otra aplicación, esta función seguirá devolviendo NormalExit a menos que el código de salida sea menor que 0.

[noexcept, since 6.7] void QProcess::failChildProcessModifier(const char *description, int error = 0)

Estas funciones se pueden utilizar dentro del conjunto de modificadores con setChildProcessModifier() para indicar que se ha encontrado una condición de error. Cuando el modificador llama a estas funciones, QProcess emitirá errorOccurred() con el código QProcess::FailedToStart en el proceso padre. El parámetro description puede ser usado para incluir alguna información en errorString() para ayudar a diagnosticar el problema, usualmente el nombre de la llamada que falló, similar a la función de la librería C perror(). Adicionalmente, el parámetro error puede ser un código de error <errno.h> cuya forma de texto también será incluida.

Por ejemplo, un modificador hijo podría preparar un descriptor de fichero extra para el proceso hijo de esta forma:

process.setChildProcessModifier([fd, &process]() {
    if (dup2(fd, TargetFileDescriptor) < 0)
        process.failChildProcessModifier(errno, "aux comm channel");
});
process.start();

Donde fd es un descriptor de fichero actualmente abierto en el proceso padre. Si la llamada al sistema dup2() resultó en una condición EBADF, el proceso errorString() podría ser "Child process modifier reported error: aux comm channel: Bad file descriptor".

Esta función no retorna a quien la llama. Usarla en cualquier lugar excepto en el modificador hijo y con el objeto QProcess correcto es un comportamiento indefinido.

Nota: La implementación impone un límite de longitud al parámetro description de unos 500 caracteres. Esto no incluye el texto del código error.

Esta función se introdujo en Qt 6.7.

Véase también setChildProcessModifier() y setUnixProcessParameters().

[signal] void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus = NormalExit)

Esta señal se emite cuando el proceso termina. exitCode es el código de salida del proceso (sólo válido para salidas normales), y exitStatus es el estado de salida. Una vez finalizado el proceso, los buffers de QProcess siguen intactos. Aún puedes leer cualquier dato que el proceso haya escrito antes de terminar.

Véase también exitStatus().

QProcess::InputChannelMode QProcess::inputChannelMode() const

Devuelve el modo del canal de entrada estándar QProcess.

Véase también setInputChannelMode() y InputChannelMode.

[override virtual] bool QProcess::isSequential() const

Reimplementa: QIODevice::isSequential() const.

[slot] void QProcess::kill()

Mata el proceso actual, provocando su salida inmediata.

En Windows, kill() utiliza TerminateProcess, y en Unix y macOS, se envía la señal SIGKILL al proceso.

Véase también terminate().

QString QProcess::nativeArguments() const

Devuelve los argumentos nativos adicionales de la línea de comandos del programa.

Nota: Esta función sólo está disponible en la plataforma Windows.

Véase también setNativeArguments().

[static] QString QProcess::nullDevice()

El dispositivo nulo del sistema operativo.

La ruta de archivo devuelta utiliza separadores de directorio nativos.

Véase también QProcess::setStandardInputFile(), QProcess::setStandardOutputFile(), y QProcess::setStandardErrorFile().

[override virtual] bool QProcess::open(QIODeviceBase::OpenMode mode = ReadWrite)

Reimplementa: QIODevice::open(QIODeviceBase::OpenMode mode).

Inicia el programa establecido por setProgram() con los argumentos establecidos por setArguments(). El OpenMode se establece en mode.

Este método es un alias de start(), y sólo existe para implementar completamente la interfaz definida por QIODevice.

Devuelve true si el programa se ha iniciado.

Véase también start(), setProgram(), y setArguments().

QProcess::ProcessChannelMode QProcess::processChannelMode() const

Devuelve el modo de canal de los canales de salida estándar y error estándar de QProcess.

Véase también setProcessChannelMode(), ProcessChannelMode, y setReadChannel().

QProcessEnvironment QProcess::processEnvironment() const

Devuelve el entorno que QProcess pasará a su proceso hijo. Si no se ha establecido ningún entorno mediante setProcessEnvironment(), este método devuelve un objeto que indica que el entorno se heredará del padre.

Véase también setProcessEnvironment(), QProcessEnvironment::inheritsFromParent(), y Environment variables.

qint64 QProcess::processId() const

Devuelve el identificador nativo del proceso en ejecución, si está disponible. Si no hay ningún proceso en ejecución, se devuelve 0.

QString QProcess::program() const

Devuelve el programa con el que se inició el proceso por última vez.

Véase también setProgram() y start().

QByteArray QProcess::readAllStandardError()

Independientemente del canal de lectura actual, esta función devuelve todos los datos disponibles del error estándar del proceso como QByteArray.

Véase también readyReadStandardError(), readAllStandardOutput(), readChannel(), y setReadChannel().

QByteArray QProcess::readAllStandardOutput()

Independientemente del canal de lectura actual, esta función devuelve todos los datos disponibles de la salida estándar del proceso como QByteArray.

Véase también readyReadStandardOutput(), readAllStandardError(), readChannel(), y setReadChannel().

QProcess::ProcessChannel QProcess::readChannel() const

Devuelve el canal de lectura actual de QProcess.

Véase también setReadChannel().

[override virtual protected] qint64 QProcess::readData(char *data, qint64 maxlen)

Reimplementa: QIODevice::readData(char *data, qint64 maxSize).

[private signal] void QProcess::readyReadStandardError()

Esta señal se emite cuando el proceso ha puesto a disposición nuevos datos a través de su canal de error estándar (stderr). Se emite independientemente del read channel actual.

Nota: Se trata de una señal privada. Puede ser utilizada en conexiones de señales pero no puede ser emitida por el usuario.

Véase también readAllStandardError() y readChannel().

[private signal] void QProcess::readyReadStandardOutput()

Esta señal se emite cuando el proceso ha puesto a disposición nuevos datos a través de su canal de salida estándar (stdout). Se emite independientemente del read channel actual.

Nota: Se trata de una señal privada. Puede ser utilizada en conexiones de señales pero no puede ser emitida por el usuario.

Véase también readAllStandardOutput() y readChannel().

void QProcess::setArguments(const QStringList &arguments)

Establece el arguments a pasar al programa llamado al iniciar el proceso. Esta función debe ser llamada antes de start().

Ver también start(), setProgram(), y arguments().

[since 6.0] void QProcess::setChildProcessModifier(const std::function<void ()> &modifier)

Establece la función modifier para el proceso hijo, para sistemas Unix (incluido macOS; para Windows, véase setCreateProcessArgumentsModifier()). La función contenida por el argumento modifier será invocada en el proceso hijo después de que fork() o vfork() se hayan completado y QProcess haya configurado los descriptores de archivo estándar para el proceso hijo, pero antes de execve(), dentro de start().

A continuación se muestra un ejemplo de configuración de un proceso hijo para que se ejecute sin privilegios:

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

Si la función modificadora experimenta una condición de fallo, puede utilizar failChildProcessModifier() para informar de la situación a la persona que llama a QProcess. Alternativamente, puede utilizar otros métodos para detener el proceso, como _exit(), o abort().

Ciertas propiedades del proceso hijo, como cerrar todos los descriptores de fichero extraños o desconectarse del TTY controlador, pueden conseguirse más fácilmente utilizando setUnixProcessParameters(), que puede detectar el fallo e informar de una condición FailedToStart. El modificador es útil para cambiar ciertas propiedades poco comunes del proceso hijo, como establecer descriptores de fichero adicionales. Si se establecen tanto un modificador de proceso hijo como parámetros de proceso Unix, el modificador se ejecuta antes de que se apliquen estos parámetros.

Nota: En aplicaciones multihilo, esta función debe tener cuidado de no llamar a ninguna función que pueda bloquear mutexes que puedan haber estado en uso en otros hilos (en general, se aconseja usar sólo funciones definidas por POSIX como "async-signal-safe"). La mayor parte de la API de Qt no es segura dentro de esta llamada de retorno, incluyendo qDebug(), y puede conducir a bloqueos.

Nota: Si la bandera UnixProcessParameters::UseVFork se establece a través de setUnixProcessParameters(), QProcess puede utilizar la semántica vfork() para iniciar el proceso hijo, por lo que esta función debe obedecer restricciones aún más estrictas. En primer lugar, dado que sigue compartiendo memoria con el proceso padre, no debe escribir en ninguna variable no local y debe obedecer la semántica de ordenación adecuada cuando lea de ellas, para evitar carreras de datos. En segundo lugar, aún más funciones de biblioteca pueden comportarse mal; por lo tanto, esta función sólo debe hacer uso de llamadas al sistema de bajo nivel, tales como read(), write(), setsid(), nice(), y similares.

Esta función se introdujo en Qt 6.0.

Véase también childProcessModifier(), failChildProcessModifier(), y setUnixProcessParameters().

void QProcess::setCreateProcessArgumentsModifier(QProcess::CreateProcessArgumentModifier modifier)

Establece el modifier para la llamada a la API Win32 CreateProcess. Pase QProcess::CreateProcessArgumentModifier() para eliminar uno previamente establecido.

Nota: Esta función sólo está disponible en la plataforma Windows y requiere C++11.

Véase también createProcessArgumentsModifier(), QProcess::CreateProcessArgumentModifier, y setChildProcessModifier().

void QProcess::setInputChannelMode(QProcess::InputChannelMode mode)

Establece el modo de canal del canal de entrada estándar QProcess al mode especificado. Este modo se utilizará la próxima vez que se llame a start().

Véase también inputChannelMode() y InputChannelMode.

void QProcess::setNativeArguments(const QString &arguments)

Establece la línea de comandos nativa adicional arguments para el programa.

En los sistemas operativos en los que la API del sistema para pasar la línea de comandos arguments a un subproceso utiliza de forma nativa una única cadena, se pueden concebir líneas de comandos que no se pueden pasar a través de la API basada en listas portátiles de QProcess. En tales casos, esta función debe utilizarse para establecer una cadena que se anexa a la cadena compuesta a partir de la lista de argumentos habitual, con un espacio delimitador.

Nota: Esta función sólo está disponible en la plataforma Windows.

Véase también nativeArguments().

void QProcess::setProcessChannelMode(QProcess::ProcessChannelMode mode)

Establece el modo de canal de los canales de salida estándar y de error estándar de QProcess al especificado en mode. Este modo se utilizará la próxima vez que se llame a start(). Por ejemplo:

QProcess builder; builder.setProcessChannelMode(QProcess::MergedChannels); builder.start("make", QStringList()<< "-j2");if (!builder.waitForFinished())    qDebug() << "Make failed:" << builder.errorString();
si no    qDebug() << "Make output:" << builder.readAll();

Véase también processChannelMode(), ProcessChannelMode, y setReadChannel().

void QProcess::setProcessEnvironment(const QProcessEnvironment &environment)

Establece la environment que QProcess pasará al proceso hijo.

Por ejemplo, el siguiente código añade la variable de entorno TMPDIR:

QProcess process;
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("TMPDIR", "C:\\MyApp\\temp"); // Add an environment variable
process.setProcessEnvironment(env);
process.start("myapp");

Tenga en cuenta que, en Windows, los nombres de las variables de entorno no distinguen entre mayúsculas y minúsculas.

Ver también processEnvironment(), QProcessEnvironment::systemEnvironment(), y Environment variables.

[protected] void QProcess::setProcessState(QProcess::ProcessState state)

Establece el estado actual de QProcess al state especificado.

Véase también state().

void QProcess::setProgram(const QString &program)

Establece el program que se utilizará al iniciar el proceso. Esta función debe llamarse antes de start().

Si program es una ruta absoluta, especifica el ejecutable exacto que se lanzará. Las rutas relativas se resolverán de una manera específica de la plataforma, que incluye la búsqueda en la variable de entorno PATH (véase Finding the Executable para más detalles).

Véase también start(), setArguments(), program() y QStandardPaths::findExecutable().

void QProcess::setReadChannel(QProcess::ProcessChannel channel)

Establece el canal de lectura actual de QProcess en channel. El canal de entrada actual es utilizado por las funciones read(), readAll(), readLine(), y getChar(). También determina qué canal activa QProcess para emitir readyRead().

Véase también readChannel().

void QProcess::setStandardErrorFile(const QString &fileName, QIODeviceBase::OpenMode mode = Truncate)

Redirige el error estándar del proceso al fichero fileName. Cuando la redirección está en marcha, el canal de lectura del error estándar está cerrado: leer de él usando read() siempre fallará, al igual que readAllStandardError(). El archivo será anexado si mode es Append, de lo contrario, será truncado.

Consulte setStandardOutputFile() para obtener más información sobre cómo se abre el archivo.

Nota: si setProcessChannelMode() fue llamada con un argumento de QProcess::MergedChannels, esta función no tiene efecto.

Véase también setStandardInputFile(), setStandardOutputFile(), y setStandardOutputProcess().

void QProcess::setStandardInputFile(const QString &fileName)

Redirige la entrada estándar del proceso al fichero indicado por fileName. Cuando se realiza una redirección de entrada, el objeto QProcess estará en modo de sólo lectura (llamar a write() producirá un error).

Para hacer que el proceso lea EOF inmediatamente, pase nullDevice() aquí. Esto es más limpio que usar closeWriteChannel() antes de escribir cualquier dato, porque puede configurarse antes de iniciar el proceso.

Si el fichero fileName no existe en el momento en que se llama a start() o no es legible, el inicio del proceso fallará.

Llamar a setStandardInputFile() después de que el proceso se haya iniciado no tiene ningún efecto.

Ver también setStandardOutputFile(), setStandardErrorFile(), y setStandardOutputProcess().

void QProcess::setStandardOutputFile(const QString &fileName, QIODeviceBase::OpenMode mode = Truncate)

Redirige la salida estándar del proceso al fichero fileName. Cuando la redirección está en marcha, el canal de lectura de la salida estándar está cerrado: leer de él usando read() siempre fallará, al igual que readAllStandardOutput().

Para descartar toda la salida estándar del proceso, pase nullDevice() aquí. Esto es más eficiente que simplemente no leer nunca la salida estándar, ya que no se llenan los buffers de QProcess.

Si el fichero fileName no existe en el momento de llamar a start(), se creará. Si no se puede crear, el arranque fallará.

Si el fichero existe y mode es QIODeviceBase::Truncate, el fichero se truncará. De lo contrario (si mode es QIODeviceBase::Append), el archivo será anexado.

Llamar a setStandardOutputFile() después de que el proceso se haya iniciado no tiene ningún efecto.

Si fileName es una cadena vacía, deja de redirigir la salida estándar. Esto es útil para restaurar la salida estándar después de la redirección.

Vea también setStandardInputFile(), setStandardErrorFile(), y setStandardOutputProcess().

void QProcess::setStandardOutputProcess(QProcess *destination)

Canaliza el flujo de salida estándar de este proceso a la entrada estándar del proceso destination.

El siguiente comando de shell:

command1 | command2

Se puede lograr con QProcess con el siguiente código:

QProcess process1;
QProcess process2;

process1.setStandardOutputProcess(&process2);

process1.start("command1");
process2.start("command2");

[since 6.6] void QProcess::setUnixProcessParameters(const QProcess::UnixProcessParameters &params)

Establece los ajustes y parámetros adicionales para el proceso hijo en sistemas Unix que se params. Esta función puede utilizarse para pedir a QProcess que modifique el proceso hijo antes de lanzar el ejecutable de destino.

Esta función puede usarse para cambiar ciertas propiedades del proceso hijo, como cerrar todos los descriptores de fichero extraños, cambiar el nivel de nice del hijo, o desconectarse del TTY controlador. Para un control más preciso del proceso hijo o para modificarlo de otras formas, utilice la función setChildProcessModifier(). Si se establecen tanto un modificador de proceso hijo como parámetros de proceso Unix, el modificador se ejecuta antes de que se apliquen estos parámetros.

Nota: Esta función sólo está disponible en plataformas Unix.

Esta función se introdujo en Qt 6.6.

Véase también unixProcessParameters() y setChildProcessModifier().

[since 6.6] void QProcess::setUnixProcessParameters(QProcess::UnixProcessFlags flagsOnly)

Establece la configuración extra para el proceso hijo en sistemas Unix a flagsOnly. Esto es lo mismo que la sobrecarga con sólo el campo flags establecido.

Nota: Esta función sólo está disponible en plataformas Unix.

Se trata de una función sobrecargada.

Esta función se introdujo en Qt 6.6.

Véase también unixProcessParameters() y setChildProcessModifier().

void QProcess::setWorkingDirectory(const QString &dir)

Establece el directorio de trabajo en dir. QProcess iniciará el proceso en este directorio. El comportamiento por defecto es iniciar el proceso en el directorio de trabajo del proceso que llama.

Véase también workingDirectory() y start().

[static] QStringList QProcess::splitCommand(QStringView command)

Divide la cadena command en una lista de símbolos y devuelve la lista.

Los tokens con espacios pueden ir rodeados de comillas dobles; tres comillas dobles consecutivas representan el carácter de comilla propiamente dicho.

void QProcess::start(const QString &program, const QStringList &arguments = {}, QIODeviceBase::OpenMode mode = ReadWrite)

Inicia el program dado en un nuevo proceso, pasando los argumentos de la línea de comandos en arguments. Ver setProgram() para información sobre cómo QProcess busca el ejecutable a ejecutar. El OpenMode se establece en mode. No se realiza ninguna otra división de los argumentos.

El objeto QProcess entrará inmediatamente en el estado Starting. Si el proceso se inicia con éxito, QProcess emitirá started(); en caso contrario, se emitirá errorOccurred(). Tenga en cuenta que en las plataformas que son capaces de iniciar procesos hijos de forma sincrónica (especialmente Windows), esas señales se emitirán antes de que esta función regrese y este objeto QProcess pasará al estado QProcess::Running o QProcess::NotRunning, respectivamente. En otras plataformas, las señales started() y errorOccurred() se retrasarán.

Llame a waitForStarted() para asegurarse de que el proceso ha comenzado (o ha fallado al comenzar) y esas señales han sido emitidas. Es seguro llamar a esa función incluso si ya se conoce el estado de inicio del proceso, aunque la señal no se emitirá de nuevo.

Windows: Los argumentos se entrecomillan y se unen en una línea de comandos compatible con la función CommandLineToArgvW() de Windows. Para los programas que tienen diferentes requisitos de entrecomillado de la línea de comandos, es necesario utilizar setNativeArguments(). Un programa notable que no sigue las reglas de CommandLineToArgvW() es cmd.exe y, en consecuencia, todos los scripts por lotes.

Si el objeto QProcess ya está ejecutando un proceso, es posible que se imprima una advertencia en la consola, y el proceso existente continuará ejecutándose sin verse afectado.

Nota: El éxito en el inicio del proceso hijo sólo implica que el sistema operativo ha creado con éxito el proceso y le ha asignado los recursos que todo proceso tiene, como su ID de proceso. El proceso hijo puede bloquearse o fallar muy pronto y, por tanto, no producir los resultados esperados. En la mayoría de los sistemas operativos, esto puede incluir errores de enlazado dinámico.

Véase también processId(), started(), waitForStarted(), y setNativeArguments().

void QProcess::start(QIODeviceBase::OpenMode mode = ReadWrite)

Inicia el programa establecido por setProgram() con los argumentos establecidos por setArguments(). El OpenMode se establece en mode.

Esta es una función sobrecargada.

Véase también open(), setProgram(), y setArguments().

[since 6.0] void QProcess::startCommand(const QString &command, QIODeviceBase::OpenMode mode = ReadWrite)

Inicia el comando command en un nuevo proceso. El OpenMode se establece en mode.

command es una única cadena de texto que contiene el nombre del programa y sus argumentos. Los argumentos están separados por uno o más espacios. Por ejemplo:

QProcess process;
process.startCommand("del /s *.txt");
// same as process.start("del", QStringList() << "/s" << "*.txt");
//...

Los argumentos que contienen espacios deben entrecomillarse para que se suministren correctamente al nuevo proceso. Por ejemplo:

QProcess process;
process.startCommand("dir \"My Documents\"");

Las comillas literales en la cadena command se representan mediante comillas triples. Por ejemplo:

QProcess process;
process.startCommand("dir \"Epic 12\"\"\" Singles\"");

Una vez que la cadena command ha sido dividida y desentrecomillada, esta función se comporta como start().

En los sistemas operativos en los que la API del sistema para pasar argumentos de línea de comandos a un subproceso utiliza de forma nativa una única cadena (Windows), se pueden concebir líneas de comandos que no se pueden pasar a través de la API portátil basada en listas de QProcess. En estos raros casos es necesario utilizar setProgram() y setNativeArguments() en lugar de esta función.

Esta función se introdujo en Qt 6.0.

Véase también splitCommand() y start().

bool QProcess::startDetached(qint64 *pid = nullptr)

Inicia el programa establecido por setProgram() con los argumentos establecidos por setArguments() en un nuevo proceso, y se separa de él. Devuelve true en caso de éxito; en caso contrario devuelve false. Si el proceso que llama sale, el proceso separado continuará ejecutándose sin verse afectado.

Unix: El proceso iniciado se ejecutará en su propia sesión y actuará como un demonio.

El proceso se iniciará en el directorio establecido por setWorkingDirectory(). Si workingDirectory() está vacío, el directorio de trabajo se hereda del proceso de llamada.

Si la función tiene éxito, entonces *pid se establece al identificador de proceso del proceso iniciado; de lo contrario, se establece a -1. Tenga en cuenta que el proceso hijo puede salir y el PID puede dejar de ser válido sin previo aviso. Además, después de que el proceso hijo salga, el mismo PID puede ser reciclado y usado por un proceso completamente diferente. El código de usuario debe ser cuidadoso al utilizar esta variable, especialmente si se pretende terminar forzosamente el proceso por medios del sistema operativo.

startDetached() sólo admite los siguientes definidores de propiedades:

Todas las demás propiedades del objeto QProcess son ignoradas.

Nota: El proceso llamado hereda la ventana de consola del proceso llamante. Para suprimir la salida de consola, redirija la salida estándar/de error a QProcess::nullDevice().

Ver también start() y 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)

Inicia el programa program con los argumentos arguments en un nuevo proceso, y se separa de él. Devuelve true en caso de éxito; en caso contrario devuelve false. Si el proceso que llama sale, el proceso separado continuará ejecutándose sin verse afectado.

El manejo de los argumentos es idéntico al de la sobrecarga start().

El proceso se iniciará en el directorio workingDirectory. Si workingDirectory está vacío, el directorio de trabajo se hereda del proceso de llamada.

Si la función tiene éxito entonces *pid se establece al identificador de proceso del proceso iniciado.

Esta función sobrecarga QProcess::startDetached().

Véase también start().

[private signal] void QProcess::started()

Esta señal es emitida por QProcess cuando el proceso ha comenzado, y state() devuelve Running.

Nota: Se trata de una señal privada. Puede ser utilizada en conexiones de señales pero no puede ser emitida por el usuario.

QProcess::ProcessState QProcess::state() const

Devuelve el estado actual del proceso.

Véase también stateChanged() y error().

[private signal] void QProcess::stateChanged(QProcess::ProcessState newState)

Esta señal se emite cada vez que cambia el estado de QProcess. El argumento newState es el estado al que ha cambiado QProcess.

Nota: Se trata de una señal privada. Puede ser utilizada en conexiones de señales pero no puede ser emitida por el usuario.

[static] QStringList QProcess::systemEnvironment()

Devuelve el entorno del proceso de llamada como una lista de pares clave=valor. Ejemplo:

QStringList environment = QProcess::systemEnvironment();
// environment = {"PATH=/usr/bin:/usr/local/bin",
//                "USER=greg", "HOME=/home/greg"}

Esta función no almacena en caché el entorno del sistema. Por lo tanto, es posible obtener una versión actualizada del entorno si se ha llamado a funciones de biblioteca C de bajo nivel como setenv o putenv.

Sin embargo, tenga en cuenta que las llamadas repetidas a esta función volverán a crear la lista de variables de entorno, que es una operación no trivial.

Nota: Para código nuevo, se recomienda utilizar QProcessEnvironment::systemEnvironment()

Véase también QProcessEnvironment::systemEnvironment() y setProcessEnvironment().

[slot] void QProcess::terminate()

Intenta terminar el proceso.

El proceso puede no salir como resultado de llamar a esta función (se le da la oportunidad de preguntar al usuario por cualquier archivo no guardado, etc).

En Windows, terminate() envía un mensaje WM_CLOSE a todas las ventanas de nivel superior del proceso y luego al hilo principal del propio proceso. En Unix y macOS se envía la señal SIGTERM.

Las aplicaciones de consola en Windows que no ejecutan un bucle de eventos, o cuyo bucle de eventos no maneja el mensaje WM_CLOSE, sólo pueden ser terminadas llamando a kill().

Véase también kill().

[noexcept, since 6.6] QProcess::UnixProcessParameters QProcess::unixProcessParameters() const

Devuelve el objeto UnixProcessParameters que describe banderas y configuraciones adicionales que se aplicarán al proceso hijo en sistemas Unix. La configuración por defecto corresponde a un UnixProcessParameters construido por defecto.

Nota: Esta función sólo está disponible en plataformas Unix.

Esta función se introdujo en Qt 6.6.

Véase también setUnixProcessParameters() y childProcessModifier().

[override virtual] bool QProcess::waitForBytesWritten(int msecs = 30000)

Reimplementa: QIODevice::waitForBytesWritten(int msecs).

bool QProcess::waitForFinished(int msecs = 30000)

Bloquea hasta que el proceso ha terminado y la señal finished() ha sido emitida, o hasta que msecs milisegundos han pasado.

Devuelve true si el proceso ha finalizado; en caso contrario, devuelve false (si la operación ha expirado, si se ha producido un error o si QProcess ya ha finalizado).

Esta función puede operar sin un bucle de eventos. Es útil cuando se escriben aplicaciones no-GUI y cuando se realizan operaciones de E/S en un hilo no-GUI.

Advertencia: Llamar a esta función desde el hilo principal (GUI) puede causar que tu interfaz de usuario se congele.

Si msecs es -1, esta función no expirará.

Ver también finished(), waitForStarted(), waitForReadyRead(), y waitForBytesWritten().

[override virtual] bool QProcess::waitForReadyRead(int msecs = 30000)

Reimplementa: QIODevice::waitForReadyRead(int msecs).

bool QProcess::waitForStarted(int msecs = 30000)

Bloquea hasta que el proceso se ha iniciado y se ha emitido la señal started(), o hasta que han transcurrido msecs milisegundos.

Devuelve true si el proceso se ha iniciado con éxito; en caso contrario devuelve false (si la operación ha finalizado o si se ha producido un error). Si el proceso ya se había iniciado con éxito antes de esta función, devuelve inmediatamente.

Esta función puede operar sin un bucle de eventos. Es útil cuando se escriben aplicaciones no-GUI y cuando se realizan operaciones de E/S en un hilo no-GUI.

Advertencia: Llamar a esta función desde el hilo principal (GUI) puede causar que su interfaz de usuario se congele.

Si msecs es -1, esta función no expirará.

Ver también started(), waitForReadyRead(), waitForBytesWritten(), y waitForFinished().

QString QProcess::workingDirectory() const

Si se ha asignado un directorio de trabajo a QProcess, esta función devuelve el directorio de trabajo en el que entrará QProcess antes de que se inicie el programa. En caso contrario (es decir, si no se ha asignado ningún directorio), se devuelve una cadena vacía y QProcess utilizará en su lugar el directorio de trabajo actual de la aplicación.

Véase también 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.