mirror of
https://github.com/python/cpython.git
synced 2025-09-27 10:50:04 +00:00
bpo-37951: Lift subprocess's fork() restriction (GH-15544)
(cherry picked from commit 98d90f745d
)
Co-authored-by: Christian Heimes <christian@python.org>
This commit is contained in:
parent
caf7a30efe
commit
03c52f2f63
4 changed files with 19 additions and 2 deletions
|
@ -483,6 +483,13 @@ functions.
|
||||||
The *start_new_session* parameter can take the place of a previously
|
The *start_new_session* parameter can take the place of a previously
|
||||||
common use of *preexec_fn* to call os.setsid() in the child.
|
common use of *preexec_fn* to call os.setsid() in the child.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.8
|
||||||
|
|
||||||
|
The *preexec_fn* parameter is no longer supported in subinterpreters.
|
||||||
|
The use of the parameter in a subinterpreter raises
|
||||||
|
:exc:`RuntimeError`. The new restriction may affect applications that
|
||||||
|
are deployed in mod_wsgi, uWSGI, and other embedded environments.
|
||||||
|
|
||||||
If *close_fds* is true, all file descriptors except :const:`0`, :const:`1` and
|
If *close_fds* is true, all file descriptors except :const:`0`, :const:`1` and
|
||||||
:const:`2` will be closed before the child process is executed. Otherwise
|
:const:`2` will be closed before the child process is executed. Otherwise
|
||||||
when *close_fds* is false, file descriptors obey their inheritable flag
|
when *close_fds* is false, file descriptors obey their inheritable flag
|
||||||
|
|
|
@ -1531,6 +1531,12 @@ Changes in the Python API
|
||||||
non-zero :attr:`~Popen.returncode`.
|
non-zero :attr:`~Popen.returncode`.
|
||||||
(Contributed by Joannah Nanjekye and Victor Stinner in :issue:`35537`.)
|
(Contributed by Joannah Nanjekye and Victor Stinner in :issue:`35537`.)
|
||||||
|
|
||||||
|
* The *preexec_fn* argument of * :class:`subprocess.Popen` is no longer
|
||||||
|
compatible with subinterpreters. The use of the parameter in a
|
||||||
|
subinterpreter now raises :exc:`RuntimeError`.
|
||||||
|
(Contributed by Eric Snow in :issue:`34651`, modified by Christian Heimes
|
||||||
|
in :issue:`37951`.)
|
||||||
|
|
||||||
* The :meth:`imap.IMAP4.logout` method no longer ignores silently arbitrary
|
* The :meth:`imap.IMAP4.logout` method no longer ignores silently arbitrary
|
||||||
exceptions.
|
exceptions.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Most features of the subprocess module now work again in subinterpreters.
|
||||||
|
Only *preexec_fn* is restricted in subinterpreters.
|
|
@ -583,8 +583,10 @@ subprocess_fork_exec(PyObject* self, PyObject *args)
|
||||||
&restore_signals, &call_setsid, &preexec_fn))
|
&restore_signals, &call_setsid, &preexec_fn))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (_PyInterpreterState_Get() != PyInterpreterState_Main()) {
|
if ((preexec_fn != Py_None) &&
|
||||||
PyErr_SetString(PyExc_RuntimeError, "fork not supported for subinterpreters");
|
(_PyInterpreterState_Get() != PyInterpreterState_Main())) {
|
||||||
|
PyErr_SetString(PyExc_RuntimeError,
|
||||||
|
"preexec_fn not supported within subinterpreters");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue