summaryrefslogtreecommitdiffstats
path: root/Doc
diff options
context:
space:
mode:
authorJakub KulĂ­k <Kulikjak@gmail.com>2023-12-17 21:34:57 (GMT)
committerGitHub <noreply@github.com>2023-12-17 21:34:57 (GMT)
commit2b93f5224216d10f8119373e72b5c2b3984e0af6 (patch)
tree2fe266d813dedeef8a19822a0db19713a8f460e5 /Doc
parent32d87a88994c131a9f3857d01ae7c07918577a55 (diff)
downloadcpython-2b93f5224216d10f8119373e72b5c2b3984e0af6.zip
cpython-2b93f5224216d10f8119373e72b5c2b3984e0af6.tar.gz
cpython-2b93f5224216d10f8119373e72b5c2b3984e0af6.tar.bz2
gh-113117: Support posix_spawn in subprocess.Popen with close_fds=True (#113118)
Add support for `os.POSIX_SPAWN_CLOSEFROM` and `posix_spawn_file_actions_addclosefrom_np` and have the `subprocess` module use them when available. This means `posix_spawn` can now be used in the default `close_fds=True` situation on many platforms. Co-authored-by: Gregory P. Smith [Google LLC] <greg@krypto.org>
Diffstat (limited to 'Doc')
-rw-r--r--Doc/library/os.rst15
-rw-r--r--Doc/whatsnew/3.13.rst26
2 files changed, 39 insertions, 2 deletions
diff --git a/Doc/library/os.rst b/Doc/library/os.rst
index a079f1f..1138cc1 100644
--- a/Doc/library/os.rst
+++ b/Doc/library/os.rst
@@ -4601,10 +4601,17 @@ written in Python, such as a mail server's external command delivery program.
Performs ``os.dup2(fd, new_fd)``.
+ .. data:: POSIX_SPAWN_CLOSEFROM
+
+ (``os.POSIX_SPAWN_CLOSEFROM``, *fd*)
+
+ Performs ``os.closerange(fd, INF)``.
+
These tuples correspond to the C library
:c:func:`!posix_spawn_file_actions_addopen`,
- :c:func:`!posix_spawn_file_actions_addclose`, and
- :c:func:`!posix_spawn_file_actions_adddup2` API calls used to prepare
+ :c:func:`!posix_spawn_file_actions_addclose`,
+ :c:func:`!posix_spawn_file_actions_adddup2`, and
+ :c:func:`!posix_spawn_file_actions_addclosefrom_np` API calls used to prepare
for the :c:func:`!posix_spawn` call itself.
The *setpgroup* argument will set the process group of the child to the value
@@ -4649,6 +4656,10 @@ written in Python, such as a mail server's external command delivery program.
.. versionchanged:: 3.13
*env* parameter accepts ``None``.
+ .. versionchanged:: 3.13
+ ``os.POSIX_SPAWN_CLOSEFROM`` is available on platforms where
+ :c:func:`!posix_spawn_file_actions_addclosefrom_np` exists.
+
.. availability:: Unix, not Emscripten, not WASI.
.. function:: posix_spawnp(path, argv, env, *, file_actions=None, \
diff --git a/Doc/whatsnew/3.13.rst b/Doc/whatsnew/3.13.rst
index 4af0235..2c869cb 100644
--- a/Doc/whatsnew/3.13.rst
+++ b/Doc/whatsnew/3.13.rst
@@ -293,6 +293,11 @@ os
process use the current process environment.
(Contributed by Jakub Kulik in :gh:`113119`.)
+* :func:`os.posix_spawn` gains an :attr:`os.POSIX_SPAWN_CLOSEFROM` attribute for
+ use in ``file_actions=`` on platforms that support
+ :c:func:`!posix_spawn_file_actions_addclosefrom_np`.
+ (Contributed by Jakub Kulik in :gh:`113117`.)
+
pathlib
-------
@@ -342,6 +347,21 @@ sqlite3
object is not :meth:`closed <sqlite3.Connection.close>` explicitly.
(Contributed by Erlend E. Aasland in :gh:`105539`.)
+subprocess
+----------
+
+* The :mod:`subprocess` module now uses the :func:`os.posix_spawn` function in
+ more situations. Notably in the default case of ``close_fds=True`` on more
+ recent versions of platforms including Linux, FreeBSD, and Solaris where the
+ C library provides :c:func:`!posix_spawn_file_actions_addclosefrom_np`.
+ On Linux this should perform similar to our existing Linux :c:func:`!vfork`
+ based code. A private control knob :attr:`!subprocess._USE_POSIX_SPAWN` can
+ be set to ``False`` if you need to force :mod:`subprocess` not to ever use
+ :func:`os.posix_spawn`. Please report your reason and platform details in
+ the CPython issue tracker if you set this so that we can improve our API
+ selection logic for everyone.
+ (Contributed by Jakub Kulik in :gh:`113117`.)
+
sys
---
@@ -415,6 +435,12 @@ Optimizations
* :func:`textwrap.indent` is now ~30% faster than before for large input.
(Contributed by Inada Naoki in :gh:`107369`.)
+* The :mod:`subprocess` module uses :func:`os.posix_spawn` in more situations
+ including the default where ``close_fds=True`` on many modern platforms. This
+ should provide a noteworthy performance increase launching processes on
+ FreeBSD and Solaris. See the ``subprocess`` section above for details.
+ (Contributed by Jakub Kulik in :gh:`113117`.)
+
Deprecated
==========