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 infra.path
import json import json
import uuid import uuid
import ctypes
import signal
from loguru import logger as LOG from loguru import logger as LOG
DBG = os.getenv("DBG", "cgdb") 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 @contextmanager
def sftp_session(hostname): def sftp_session(hostname):
@ -356,7 +370,7 @@ class LocalRemote(CmdMixin):
LOG.info(f"[{self.hostname}] {cmd} (env: {self.env})") LOG.info(f"[{self.hostname}] {cmd} (env: {self.env})")
self.stdout = open(os.path.join(self.root, "out"), "wb") self.stdout = open(os.path.join(self.root, "out"), "wb")
self.stderr = open(os.path.join(self.root, "err"), "wb") self.stderr = open(os.path.join(self.root, "err"), "wb")
self.proc = subprocess.Popen( self.proc = popen(
self.cmd, self.cmd,
cwd=self.root, cwd=self.root,
stdout=self.stdout, stdout=self.stdout,