Commit 97b0b1e8 authored by Gregory P. Smith's avatar Gregory P. Smith

Fix issue #6973: When we know a subprocess.Popen process has died, do

not allow the send_signal(), terminate(), or kill() methods to do
anything as they could potentially signal a different process.
parents c4b528e8 2cd1b3b0
......@@ -1333,8 +1333,10 @@ class Popen(object):
return (stdout, stderr)
def send_signal(self, sig):
"""Send a signal to the process
"""
"""Send a signal to the process."""
# Don't signal a process that we know has already died.
if self.returncode is not None:
return
if sig == signal.SIGTERM:
self.terminate()
elif sig == signal.CTRL_C_EVENT:
......@@ -1345,8 +1347,10 @@ class Popen(object):
raise ValueError("Unsupported signal: {}".format(sig))
def terminate(self):
"""Terminates the process
"""
"""Terminates the process."""
# Don't terminate a process that we know has already died.
if self.returncode is not None:
return
try:
_winapi.TerminateProcess(self._handle, 1)
except PermissionError:
......@@ -1754,9 +1758,10 @@ class Popen(object):
def send_signal(self, sig):
"""Send a signal to the process
"""
os.kill(self.pid, sig)
"""Send a signal to the process."""
# Skip signalling a process that we know has already died.
if self.returncode is None:
os.kill(self.pid, sig)
def terminate(self):
"""Terminate the process with SIGTERM
......
......@@ -88,6 +88,10 @@ Core and Builtins
Library
-------
- Issue #6973: When we know a subprocess.Popen process has died, do
not allow the send_signal(), terminate(), or kill() methods to do
anything as they could potentially signal a different process.
- Issue #23883: Added missing APIs to __all__ to match the documented APIs
for the following modules: csv, enum, ftplib, logging, optparse, threading
and wave. Also added a test.support.check__all__() helper. Patches by
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment