bpo-30794: added kill() method to multiprocessing.Process (#2528)

* bpo-30794: added kill() method to multiprocessing.Process

* Added entries to documentation and NEWS

* Refactored test_terminate and test_kill

* Fix SIGTERM and SIGKILL being used on Windows for the tests

* Added "versionadded" marker to the documentation

* Fix trailing whitespace in doc
This commit is contained in:
Vitor Pereira 2017-07-18 16:34:23 +01:00 committed by Antoine Pitrou
parent f474c5a3f3
commit ba75af7130
6 changed files with 40 additions and 9 deletions

View file

@ -49,16 +49,22 @@ class Popen(object):
return self.poll(os.WNOHANG if timeout == 0.0 else 0)
return self.returncode
def terminate(self):
def _send_signal(self, sig):
if self.returncode is None:
try:
os.kill(self.pid, signal.SIGTERM)
os.kill(self.pid, sig)
except ProcessLookupError:
pass
except OSError:
if self.wait(timeout=0.1) is None:
raise
def terminate(self):
self._send_signal(signal.SIGTERM)
def kill(self):
self._send_signal(signal.SIGKILL)
def _launch(self, process_obj):
code = 1
parent_r, child_w = os.pipe()

View file

@ -97,5 +97,7 @@ class Popen(object):
if self.wait(timeout=1.0) is None:
raise
kill = terminate
def close(self):
self.finalizer()

View file

@ -122,6 +122,13 @@ class BaseProcess(object):
self._check_closed()
self._popen.terminate()
def kill(self):
'''
Terminate process; sends SIGKILL signal or uses TerminateProcess()
'''
self._check_closed()
self._popen.kill()
def join(self, timeout=None):
'''
Wait until child process terminates