summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qprocess.cpp
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2022-08-11 15:18:52 -0700
committerThiago Macieira <thiago.macieira@intel.com>2022-08-22 14:37:26 -0700
commitf514ed7d76fe6a74dbb1f246b4725a037fc256be (patch)
tree2fc40c250b588c94475195da6e0f7b05bce915b7 /src/corelib/io/qprocess.cpp
parent5afb04d79ba246d9dca30c666511ce7505113ac5 (diff)
QProcess/docs: add more information about environment variables
Fixes: QTBUG-42500 Pick-to: 6.4 Change-Id: Ie4bb662dcb274440ab8bfffd170a6a56977ef8b9 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> Reviewed-by: Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>
Diffstat (limited to 'src/corelib/io/qprocess.cpp')
-rw-r--r--src/corelib/io/qprocess.cpp51
1 files changed, 44 insertions, 7 deletions
diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp
index e116fe861d..c838b665b7 100644
--- a/src/corelib/io/qprocess.cpp
+++ b/src/corelib/io/qprocess.cpp
@@ -483,7 +483,7 @@ void QProcessPrivate::Channel::clear()
\endlist
To avoid platform-dependent behavior or any issues with how the current
- application was launched, it is adviseable to always pass an absolute path
+ application was launched, it is advisable to always pass an absolute path
to the executable to be launched. For auxiliary binaries shipped with the
application, one can construct such a path starting with
QCoreApplication::applicationDirPath(). Similarly, to explicitly run an
@@ -507,6 +507,42 @@ void QProcessPrivate::Channel::clear()
run. For Windows, due to the non-standard way \c{cmd.exe} parses its
command-line, use setNativeArguments() (for example, "/c dir d:").
+ \section1 Environment variables
+
+ The QProcess API offers methods to manipulate the environment variables
+ that the child process will see. By default, the child process will have a
+ copy of the current process environment variables that exist at the time
+ the start() function is called. This means that any modifications performed
+ using qputenv() prior to that call will be reflected in the child process'
+ environment. Note that QProcess makes no attempt to prevent race conditions
+ with qputenv() happening in other threads, so it is recommended to avoid
+ qputenv() after the application's initial start up.
+
+ The environment for a specific child can be modified using the
+ processEnvironment() and setProcessEnvironment() functions, which use the
+ \l QProcessEnvironment class. By default, processEnvironment() will return
+ an object for which QProcessEnvironment::inheritsFromParent() is true.
+ Setting an environment that does not inherit from the parent will cause
+ QProcess to use exactly that environment for the child when it is started.
+
+ The normal scenario starts from the current environment by calling
+ QProcessEnvironment::systemEnvironment() and then proceeds to adding,
+ changing, or removing specific variables. The resulting variable roster can
+ then be applied to a QProcess with setProcessEnvironment().
+
+ It is possible to remove all variables from the environment or to start
+ from an empty environment, using the QProcessEnvironment() default
+ constructor. This is not advisable outside of controlled and
+ system-specific conditions, as there may be system variables that are set
+ in the current process environment and are required for proper execution
+ of the child process.
+
+ On Windows, QProcess will copy the current process' \c "PATH" and \c
+ "SystemRoot" environment variables if they were unset. It is not possible
+ to unset them completely, but it is possible to set them to empty values.
+ Setting \c "PATH" to empty on Windows will likely cause the child process
+ to fail to start.
+
\section1 Communicating via Channels
Processes have two predefined output channels: The standard
@@ -1716,7 +1752,8 @@ QStringList QProcess::environment() const
Note how, on Windows, environment variable names are case-insensitive.
- \sa processEnvironment(), QProcessEnvironment::systemEnvironment(), setEnvironment()
+ \sa processEnvironment(), QProcessEnvironment::systemEnvironment(),
+ {Environment variables}
*/
void QProcess::setProcessEnvironment(const QProcessEnvironment &environment)
{
@@ -1726,12 +1763,12 @@ void QProcess::setProcessEnvironment(const QProcessEnvironment &environment)
/*!
\since 4.6
- Returns the environment that QProcess will pass to its child
- process, or an empty object if no environment has been set using
- setEnvironment() or setProcessEnvironment(). If no environment has
- been set, the environment of the calling process will be used.
+ Returns the environment that QProcess will pass to its child process. If no
+ environment has been set using setProcessEnvironment(), this method returns
+ an object indicating the environment will be inherited from the parent.
- \sa setProcessEnvironment(), setEnvironment(), QProcessEnvironment::isEmpty()
+ \sa setProcessEnvironment(), QProcessEnvironment::inheritsFromParent(),
+ {Environment variables}
*/
QProcessEnvironment QProcess::processEnvironment() const
{