Send SIGTERM to cchost if parent dies (#158)

This commit is contained in:
Amaury Chamayou 2019-06-14 10:56:35 +01:00 коммит произвёл GitHub
Родитель 6efad0b64c
Коммит a112a86e22
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
1 изменённых файлов: 15 добавлений и 1 удалений

Просмотреть файл

@ -11,11 +11,25 @@ from contextlib import contextmanager
import infra.path
import json
import uuid
import ctypes
import signal
from loguru import logger as LOG
DBG = os.getenv("DBG", "cgdb")
_libc = ctypes.CDLL("libc.so.6")
def _term_on_pdeathsig():
# usr/include/linux/prctl.h: #define PR_SET_PDEATHSIG 1
_libc.prctl(1, signal.SIGTERM)
def popen(*args, **kwargs):
kwargs["preexec_fn"] = _term_on_pdeathsig
return subprocess.Popen(*args, **kwargs)
@contextmanager
def sftp_session(hostname):
@ -356,7 +370,7 @@ class LocalRemote(CmdMixin):
LOG.info(f"[{self.hostname}] {cmd} (env: {self.env})")
self.stdout = open(os.path.join(self.root, "out"), "wb")
self.stderr = open(os.path.join(self.root, "err"), "wb")
self.proc = subprocess.Popen(
self.proc = popen(
self.cmd,
cwd=self.root,
stdout=self.stdout,