##// END OF EJS Templates
Add kill_bg_processes for %%script magic
Takafumi Arakaki -
Show More
@@ -134,6 +134,10 b' class ScriptMagics(Magics, Configurable):'
134 self._generate_script_magics()
134 self._generate_script_magics()
135 Magics.__init__(self, shell=shell)
135 Magics.__init__(self, shell=shell)
136 self.job_manager = BackgroundJobManager()
136 self.job_manager = BackgroundJobManager()
137 self.bg_processes = []
138
139 def __del__(self):
140 self.kill_bg_processes()
137
141
138 def _generate_script_magics(self):
142 def _generate_script_magics(self):
139 cell_magics = self.magics['cell']
143 cell_magics = self.magics['cell']
@@ -196,6 +200,7 b' class ScriptMagics(Magics, Configurable):'
196
200
197 cell = cell.encode('utf8', 'replace')
201 cell = cell.encode('utf8', 'replace')
198 if args.bg:
202 if args.bg:
203 self.bg_processes.append(p)
199 if args.out:
204 if args.out:
200 self.shell.user_ns[args.out] = p.stdout
205 self.shell.user_ns[args.out] = p.stdout
201 if args.err:
206 if args.err:
@@ -245,3 +250,26 b' class ScriptMagics(Magics, Configurable):'
245 p.stdin.write(cell)
250 p.stdin.write(cell)
246 p.stdin.close()
251 p.stdin.close()
247 p.wait()
252 p.wait()
253
254 def kill_bg_processes(self):
255 """Kill all BG processes which are still running."""
256 for p in self.bg_processes:
257 if p.poll() is None:
258 try:
259 p.send_signal(signal.SIGINT)
260 except:
261 pass
262 time.sleep(0.1)
263 for p in self.bg_processes:
264 if p.poll() is None:
265 try:
266 p.terminate()
267 except:
268 pass
269 time.sleep(0.1)
270 for p in self.bg_processes:
271 if p.poll() is None:
272 try:
273 p.kill()
274 except:
275 pass
General Comments 0
You need to be logged in to leave comments. Login now