KProcess Class

Header: #include <KProcess>
CMake: find_package(KF6 REQUIRED COMPONENTS CoreAddons)
target_link_libraries(mytarget PRIVATE KF6::CoreAddons)

Public Types

enum OutputChannelMode { SeparateChannels, MergedChannels, ForwardedChannels, OnlyStdoutChannel, OnlyStderrChannel }

Public Functions

KProcess(QObject *parent = nullptr)
void clearEnvironment()
void clearProgram()
int execute(int msecs = -1)
KProcess::OutputChannelMode outputChannelMode() const
QStringList program() const
void setEnv(const QString &name, const QString &value, bool overwrite = true)
void setNextOpenMode(QIODeviceBase::OpenMode mode)
void setOutputChannelMode(KProcess::OutputChannelMode mode)
void setProgram(const QString &exe, const QStringList &args = QStringList())
void setProgram(const QStringList &argv)
void setShellCommand(const QString &cmd)
void start()
int startDetached()
void unsetEnv(const QString &name)
KProcess &operator<<(const QString &arg)
KProcess &operator<<(const QStringList &args)

Static Public Members

int execute(const QStringList &argv, int msecs = -1)
int execute(const QString &exe, const QStringList &args = QStringList(), int msecs = -1)
int startDetached(const QStringList &argv)
int startDetached(const QString &exe, const QStringList &args = QStringList())

Detailed Description

Child process invocation, monitoring and control.

This class extends QProcess by some useful functionality, overrides some defaults with saner values and wraps parts of the API into a more accessible one. Only use KProcess if you need the extra features, otherwise QProcess is the preferred way of spawning child processes.

Member Type Documentation

enum KProcess::OutputChannelMode

Modes in which the output channels can be opened.

ConstantValueDescription
KProcess::SeparateChannelsQProcess::SeparateChannelsStandard output and standard error are handled by KProcess as separate channels
KProcess::MergedChannelsQProcess::MergedChannelsStandard output and standard error are handled by KProcess as one channel
KProcess::ForwardedChannelsQProcess::ForwardedChannelsBoth standard output and standard error are forwarded to the parent process' respective channel
KProcess::OnlyStdoutChannelQProcess::ForwardedErrorChannelOnly standard output is handled; standard error is forwarded
KProcess::OnlyStderrChannelQProcess::ForwardedOutputChannelOnly standard error is handled; standard output is forwarded

Member Function Documentation

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

Constructor

void KProcess::clearEnvironment()

Empties the process' environment.

Note that LD_LIBRARY_PATH/DYLD_LIBRARY_PATH is automatically added on *NIX.

This function must be called before starting the process.

void KProcess::clearProgram()

Clear the program and command line argument list.

int KProcess::execute(int msecs = -1)

Start the process, wait for it to finish, and return the exit code.

This method is roughly equivalent to the sequence:

start();
waitForFinished(msecs);
return exitCode();

Unlike the other execute() variants this method is not static, so the process can be parametrized properly and talked to.

msecs time to wait for process to exit before killing it

Returns -2 if the process could not be started, -1 if it crashed, otherwise its exit code

[static] int KProcess::execute(const QStringList &argv, int msecs = -1)

This is an overloaded function.

argv the program to execute and the command line arguments for the program, one per list element

msecs time to wait for process to exit before killing it

Returns -2 if the process could not be started, -1 if it crashed, otherwise its exit code

[static] int KProcess::execute(const QString &exe, const QStringList &args = QStringList(), int msecs = -1)

This is an overloaded function.

exe the program to execute

args the command line arguments for the program, one per list element

msecs time to wait for process to exit before killing it

Returns -2 if the process could not be started, -1 if it crashed, otherwise its exit code

KProcess::OutputChannelMode KProcess::outputChannelMode() const

Query how the output channels of the child process are handled.

Returns the output channel handling mode

See also setOutputChannelMode().

QStringList KProcess::program() const

Obtain the currently set program and arguments.

Returns a list, the first element being the program, the remaining ones being command line arguments to the program.

See also setProgram().

void KProcess::setEnv(const QString &name, const QString &value, bool overwrite = true)

Adds the variable name to the process' environment.

This function must be called before starting the process.

name the name of the environment variable

value the new value for the environment variable

overwrite if false and the environment variable is already set, the old value will be preserved

void KProcess::setNextOpenMode(QIODeviceBase::OpenMode mode)

Set the QIODevice open mode the process will be opened in.

This function must be called before starting the process, obviously.

mode the open mode. Note that this mode is automatically "reduced" according to the channel modes and redirections.

The default is QIODevice::ReadWrite.

void KProcess::setOutputChannelMode(KProcess::OutputChannelMode mode)

Set how to handle the output channels of the child process.

The default is ForwardedChannels, which is unlike in QProcess. Do not request more than you actually handle, as this output is simply lost otherwise.

This function must be called before starting the process.

mode the output channel handling mode

See also outputChannelMode().

void KProcess::setProgram(const QString &exe, const QStringList &args = QStringList())

Set the program and the command line arguments.

This function must be called before starting the process, obviously.

exe the program to execute args the command line arguments for the program, one per list element

See also program().

void KProcess::setProgram(const QStringList &argv)

This is an overloaded function.

argv the program to execute and the command line arguments for the program, one per list element

void KProcess::setShellCommand(const QString &cmd)

Set a command to execute through a shell (a POSIX sh on *NIX and cmd.exe on Windows).

Using this for anything but user-supplied commands is usually a bad idea, as the command's syntax depends on the platform. Redirections including pipes, etc. are better handled by the respective functions provided by QProcess.

If KProcess determines that the command does not really need a shell, it will transparently execute it without one for performance reasons.

This function must be called before starting the process, obviously.

cmd the command to execute through a shell.

The caller must make sure that all filenames etc. are properly quoted when passed as argument. Failure to do so often results in serious security holes. See KShell::quoteArg().

void KProcess::start()

Start the process.

See also QProcess::start(const QString &, const QStringList &, OpenMode).

int KProcess::startDetached()

Start the process and detach from it. See QProcess::startDetached() for details.

Unlike the other startDetached() variants this method is not static, so the process can be parametrized properly.

Note: Currently, only the setProgram()/setShellCommand() and setWorkingDirectory() parametrizations are supported.

The KProcess object may be re-used immediately after calling this function.

Returns the PID of the started process or 0 on error

[static] int KProcess::startDetached(const QStringList &argv)

This is an overloaded function.

argv the program to start and the command line arguments for the program, one per list element

Returns the PID of the started process or 0 on error

[static] int KProcess::startDetached(const QString &exe, const QStringList &args = QStringList())

This is an overloaded function.

exe the program to start

args the command line arguments for the program, one per list element

Returns the PID of the started process or 0 on error

void KProcess::unsetEnv(const QString &name)

Removes the variable name from the process' environment.

This function must be called before starting the process.

name the name of the environment variable

KProcess &KProcess::operator<<(const QString &arg)

Append an element to the command line argument list for this process.

If no executable is set yet, it will be set instead.

For example, doing an "ls -l /usr/local/bin" can be achieved by:

KProcess p;
p << "ls" << "-l" << "/usr/local/bin";
...

This function must be called before starting the process, obviously.

arg the argument to add

Returns a reference to this KProcess

KProcess &KProcess::operator<<(const QStringList &args)

This is an overloaded function.

args the arguments to add

Returns a reference to this KProcess