From 1b1058ddb5cef930ae4acb270df0bef11edefde7 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 7 Sep 2014 07:20:44 -0500 Subject: [PATCH] Avoid zombie shells - addresses #30 --- jupyter_kernel/magics/help_magic.py | 2 +- jupyter_kernel/magics/shell_magic.py | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/jupyter_kernel/magics/help_magic.py b/jupyter_kernel/magics/help_magic.py index 97b28cdc..65a51007 100644 --- a/jupyter_kernel/magics/help_magic.py +++ b/jupyter_kernel/magics/help_magic.py @@ -53,7 +53,7 @@ def get_help_on(self, info, level): if info['magic']: if info['magic']['name'] == 'help': - return self.get_help('line', 'help') + return self.get_help('line', 'help', level) minfo = info['magic'] errmsg = "No such %s magic '%s'" % (minfo['type'], minfo['name']) diff --git a/jupyter_kernel/magics/shell_magic.py b/jupyter_kernel/magics/shell_magic.py index ec668086..30c08bea 100644 --- a/jupyter_kernel/magics/shell_magic.py +++ b/jupyter_kernel/magics/shell_magic.py @@ -5,7 +5,7 @@ from jupyter_kernel import Magic import subprocess import os -import signal +import atexit import threading import time try: @@ -86,6 +86,8 @@ def start_process(self): self.proc = subprocess.Popen(self.cmd, **kwargs) + atexit.register(self.proc.terminate) + self._error_thread = threading.Thread(target=self._read_errors) self._error_queue = Queue.Queue() self._error_thread.setDaemon(True) @@ -116,6 +118,9 @@ def get_help_on(self, info, level=0): else: return "Sorry, no help is available on '%s'." % expr + def __del__(self): + self.proc.terminate() + def register_magics(kernel): kernel.register_magics(ShellMagic)