def terminate(self): try: _winapi.TerminateProcess(self._handle, 1) except PermissionError: rc = _winapi.GetExitCodeProcess(self._handle) if rc == _winapi.STILL_ACTIVE: raise self.returncode = rc
def _wait_pid(self, blocking): assert self.__handle is not None if blocking: timeout = _winapi.INFINITE else: timeout = 0 result = _winapi.WaitForSingleObject(self.__handle, timeout) if result != _winapi.WAIT_TIMEOUT: self.__result = _winapi.GetExitCodeProcess(self._handle)
def wait(self, timeout=None): if self.returncode is None: if timeout is None: msecs = _winapi.INFINITE else: msecs = max(0, int(timeout * 1000 + 0.5)) res = _winapi.WaitForSingleObject(int(self._handle), msecs) if res == _winapi.WAIT_OBJECT_0: code = _winapi.GetExitCodeProcess(self._handle) if code == TERMINATE: code = -signal.SIGTERM self.returncode = code return self.returncode
def wait(self, timeout=None, endtime=None): if endtime is not None: timeout = self._remaining_time(endtime) if timeout is None: timeout_millis = _winapi.INFINITE else: timeout_millis = int(timeout*1000) if self.returncode is None: result = _winapi.WaitForSingleObject(self._handle, timeout_millis) if result == _winapi.WAIT_TIMEOUT: raise TimeoutExpired(self.args, timeout) self.returncode = _winapi.GetExitCodeProcess(self._handle) return self.returncode