зеркало из https://github.com/microsoft/CCF.git
Send SIGTERM to cchost if parent dies (#158)
This commit is contained in:
Родитель
6efad0b64c
Коммит
a112a86e22
|
@ -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,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче