@@ -346,6 +346,33 @@ def start(self):
346346 self .log .info ("Wrote hashed password to %s" % self .config_file )
347347
348348
349+ class NbserverStopApp (JupyterApp ):
350+ version = __version__
351+ description = "Stop currently running notebook server for a given port"
352+
353+ port = Integer (8888 , config = True ,
354+ help = "Port of the server to be killed. Default 8888" )
355+
356+ def parse_command_line (self , argv = None ):
357+ super (NbserverStopApp , self ).parse_command_line (argv )
358+ if self .extra_args :
359+ self .port = int (self .extra_args [0 ])
360+
361+ def start (self ):
362+ servers = list_running_servers (self .runtime_dir )
363+ server = next ((server for server in servers if server .get ('port' )== self .port ),None )
364+ if server : os .kill (server .get ('pid' ), signal .SIGTERM )
365+ else :
366+ ports = [s .get ('port' ) for s in list_running_servers (self .runtime_dir )]
367+ if ports :
368+ print ("There is currently no server running on port {}." .format (self .port ))
369+ print ("Ports currently in use:" )
370+ for port in ports : print ("\t * {}" .format (port ))
371+ else :
372+ print ("There are currently no running servers" )
373+ self .exit (1 )
374+
375+
349376class NbserverListApp (JupyterApp ):
350377 version = __version__
351378 description = "List currently running notebook servers."
@@ -449,6 +476,7 @@ class NotebookApp(JupyterApp):
449476
450477 subcommands = dict (
451478 list = (NbserverListApp , NbserverListApp .description .splitlines ()[0 ]),
479+ stop = (NbserverStopApp , NbserverStopApp .description .splitlines ()[0 ]),
452480 password = (NotebookPasswordApp , NotebookPasswordApp .description .splitlines ()[0 ]),
453481 )
454482
0 commit comments