def METHOD_NAME(self, timeout: int = 15) -> None:
    if self._process is None:
        raise RuntimeError("Process not started")
    if self.poll():
        self.logger.debug("Process already finished")
        return
    self._result = {"error": "Stopped by execution"}
    self._process.terminate()
    try:
        self._process.communicate(timeout=timeout)
    except subprocess.TimeoutExpired:
        self._process.kill()
        self._process.communicate()