summaryrefslogtreecommitdiff
path: root/util/ec3po/console.py
diff options
context:
space:
mode:
Diffstat (limited to 'util/ec3po/console.py')
-rwxr-xr-xutil/ec3po/console.py7
1 files changed, 4 insertions, 3 deletions
diff --git a/util/ec3po/console.py b/util/ec3po/console.py
index 608e1b7cba..0b2b586252 100755
--- a/util/ec3po/console.py
+++ b/util/ec3po/console.py
@@ -817,13 +817,14 @@ def IsPrintable(byte):
"""
return byte >= ord(' ') and byte <= ord('~')
-def StartLoop(console, command_active):
+def StartLoop(console, command_active, ppid = os.getppid()):
"""Starts the infinite loop of console processing.
Args:
console: A Console object that has been properly initialzed.
command_active: multiprocessing.Value indicating if servod owns
the console, or user owns the console. This prevents input collisions.
+ ppid: original parent pid to stop loop when parent dies.
"""
console.logger.debug('Console is being served on %s.', console.user_pty)
console.logger.debug('Console master is on %s.', console.master_pty)
@@ -836,7 +837,7 @@ def StartLoop(console, command_active):
ep = select.epoll()
ep.register(console.master_pty, select.EPOLLHUP)
- while True:
+ while os.getppid() == ppid:
# Check to see if pts is connected to anything
events = ep.poll(0)
master_connected = not events
@@ -980,7 +981,7 @@ def main(argv):
# Spawn an interpreter process.
itpr_process = multiprocessing.Process(target=interpreter.StartLoop,
- args=(itpr,))
+ args=(itpr,os.getpid()))
# Make sure to kill the interpreter when we terminate.
itpr_process.daemon = True
# Start the interpreter.