mirror of https://github.com/m-labs/artiq.git
ctlmgr/gui/master: start subprocesses in new pgroup
This only makes a difference on POSIX. It prevents subprocesses from receiving the signals that the parent receives. For ctlmgr and master is cuts down on spam on the console (KeyboardInterrupt tracebacks from all controllers) and enforces that proper termination is followed. This does not help if the parent gets SIGKILL (subprocesses may linger).
This commit is contained in:
parent
4bd5a55a2a
commit
fef72506e4
|
@ -86,7 +86,7 @@ class Controller:
|
||||||
self.process = await asyncio.create_subprocess_exec(
|
self.process = await asyncio.create_subprocess_exec(
|
||||||
*shlex.split(self.command),
|
*shlex.split(self.command),
|
||||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
|
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
|
||||||
env=env)
|
env=env, start_new_session=True)
|
||||||
asyncio.ensure_future(
|
asyncio.ensure_future(
|
||||||
LogParser(self._get_log_source).stream_task(
|
LogParser(self._get_log_source).stream_task(
|
||||||
self.process.stdout))
|
self.process.stdout))
|
||||||
|
|
|
@ -116,7 +116,8 @@ class AppletDock(QDockWidgetCloseDetect):
|
||||||
)
|
)
|
||||||
logger.debug("starting command %s for %s", command, self.applet_name)
|
logger.debug("starting command %s for %s", command, self.applet_name)
|
||||||
try:
|
try:
|
||||||
await self.ipc.create_subprocess(*shlex.split(command))
|
await self.ipc.create_subprocess(*shlex.split(command),
|
||||||
|
start_new_session=True)
|
||||||
except:
|
except:
|
||||||
logger.warning("Applet %s failed to start", self.applet_name,
|
logger.warning("Applet %s failed to start", self.applet_name,
|
||||||
exc_info=True)
|
exc_info=True)
|
||||||
|
|
|
@ -87,7 +87,7 @@ class Worker:
|
||||||
sys.executable, "-m", "artiq.master.worker_impl",
|
sys.executable, "-m", "artiq.master.worker_impl",
|
||||||
self.ipc.get_address(), str(log_level),
|
self.ipc.get_address(), str(log_level),
|
||||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
|
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
|
||||||
env=env)
|
env=env, start_new_session=True)
|
||||||
asyncio.ensure_future(
|
asyncio.ensure_future(
|
||||||
LogParser(self._get_log_source).stream_task(
|
LogParser(self._get_log_source).stream_task(
|
||||||
self.ipc.process.stdout))
|
self.ipc.process.stdout))
|
||||||
|
|
Loading…
Reference in New Issue