mirror of
https://github.com/python/cpython.git
synced 2025-08-29 05:05:03 +00:00
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.
This commit is contained in:
parent
025a1fd990
commit
a0c9caad66
2 changed files with 16 additions and 7 deletions
|
@ -1241,8 +1241,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:
|
||||
|
@ -1253,8 +1255,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:
|
||||
|
@ -1678,9 +1682,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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue