如何正确关闭IPython Notebook?

152

如何正确关闭IPython Notebook?

目前,我只是关闭浏览器标签,然后在终端中使用Ctrl+C
不幸的是,exit()和选择 Kill kernel upon exit 都无法帮助解决问题(它们会终止内核,但不会退出iPython)。


特定端口打开的内核(kernel)的PID可以使用“ps -ax”或“top”命令查看。因此,可以使用[管理员权限]选择性地停止内核以终止该特定进程:# kill PID-of-k-i。这样可以防止内核进行任何内部关闭程序,但也不会强制执行Ctl-C类型的操作...。是否有人知道Jupyter是否计划支持此功能? - Dr C
16个回答

149

目前在终端中使用Ctrl+C是最好的方法。

我们正在思考如何进行显式关闭,但是笔记本作为单用户应用程序时,用户可以自由停止它,在多用户服务器上,则只有管理员可以停止它。我们还没有完全解决如何处理这些差异。

(对于未来的读者,这是0.12发布和0.13开发中的情况。)

2017年12月更新

IPython Notebook已成为Jupyter Notebook。最近的版本添加了一个jupyter notebook stop shell命令,可以停止在该系统上运行的服务器。如果不是默认端口8888,则可以在命令行中传递端口号。

你也可以使用nbmanager,一款桌面应用程序,它可以显示正在运行的服务器并关闭它们。

最后,我们正在努力添加:

  • 一个配置选项,以指定时间自动关闭服务器。
  • 在用户界面中添加一个按钮来关闭服务器。(我们知道这需要很长时间,改变UI是有争议的。)

1
也许可以在配置文件和命令行中提供一个选项,允许显式地终止服务器(通过菜单中的按钮?)或不允许。这样,那些希望服务器始终运行的人就可以设置正确的配置。 - gaborous
8
这种情况有没有改变?几年过去了,Ctrl+C是否仍然是关闭iPython笔记本服务器的唯一可靠方式? - EFC
目前仍然没有办法从笔记本UI内部关闭它,但我编写了nbmanager,这是一个可以列出和关闭笔记本服务器和内核的工具。 - Thomas K
所以我认为在使用jupyter notebook &时不是一个好主意,因为Ctrl+C在这种情况下不适用。 - Naveen Dennis
我尝试过这个方法,但是除了ctrl+C之外,没有其他方式可以在运行Jupyter Notebook进程的控制台中输入任何内容。我尝试打开一个新的PowerShell/命令提示符并从那里键入“jupyter notebook stop”,但它没有起作用。 - julianhatwell
2
@julianhatwell,“jupyter notbook stop” 应该在另一个控制台中输入。 - mit

32

我认为已被接受的答案已经过时并不再有效。

您可以在文件菜单项上的Web界面中终止Jupyter笔记本。

输入图像描述

当您将鼠标光标移动到“close and halt”上时,您将看到以下说明。

输入图像描述

当您单击“close and halt”时,您将在终端屏幕上看到以下消息。

输入图像描述


19
为了澄清,这会停止运行Python代码的进程,也就是内核。它不会停止制作笔记本界面、处理加载和保存文件等功能的笔记本服务器 - Thomas K
我的界面上没有这个下拉菜单,我复制并粘贴URL到Chrome浏览器。 - zyy

29

如果你像我一样在后台运行jupyter:

jupyter notebook &> /dev/null &

退出Jupyter Notebook时,不要使用Ctl-C,而是创建一个别名命令:

echo 'alias quitjupyter="kill $(pgrep jupyter)"' >> ~/.bashrc

重新启动终端。关闭所有Jupyter实例:

quitjupyter

注意:在单引号内使用双引号,如上所示。反过来会在写入到您的 .bashrc 之前计算表达式(您希望写入命令本身而不是“kill 1430”或任何可能与当前 jupyter 实例相关联的进程号)。当然,您可以使用任何别名。我实际上使用 'qjup':

echo 'alias qjup="kill $(pgrep jupyter)"' >> ~/.bashrc

重新启动您的终端。杀死所有jupyter实例:

qjup

“kill $(pgrep jupyter)” 这句命令非常好用。我在远程终端上运行了“jupyter notebook”,但因为终端崩溃,所以无法使用CTRL+C方法来关闭它。除了重启远程终端这个毁灭性的选择之外,这个命令确实很棒。 - MichaelChirico
3
为什么不直接使用 pkill jupyter 来结束进程?pkill 是用于终止进程的 pgrep 命令。 - Nelson Auner
美元符号有什么作用?我从ps | grep jupyter得到了正确的答案,但从pgrep jupyter得到了空响应。有人能解释一下区别吗?GNU bash,版本3.2.57(1)-release(x86_64-apple-darwin18)macOS 10.14.6 - David Epstein
至少在BSD/MacOS上,我需要使用"pgrep -f jupyter",这样匹配才能检查完整的参数列表,而不仅仅是进程名称。 - TextGeek

24

第一步是保存所有打开的笔记本。然后考虑关闭正在运行的Jupyter Notebook。您可以使用此简单命令:

$ jupyter notebook stop 
Shutting down server on port 8888 ...

同时还需将端口号作为参数传递,才能优雅地关闭Jupyter Notebook。

例如:

For eg:

jupyter notebook stop 8889 
Shutting down server on port 8889 ...

此外,要了解当前正在运行的jupyter实例,请检查以下命令:

shell> jupyter notebook list 
Currently running servers:
http://localhost:8888/?token=ef12021898c435f865ec706de98632 :: /Users/username/jupyter-notebooks [/code]

那是一个打错字,谢谢你指出来。已经更正了。 - moronkreacionz

16

这些命令对我有用:

jupyter notebook list # shows the running notebooks and their port-numbers
                      # (for instance: 8080)
lsof -n -i4TCP:[port-number] # shows PID.
kill -9 [PID] # kill the process.

这个答案是从这里改编而来。


5
Linux (Ubuntu 14.04)

如前所述,尝试通过首先进入您的ipynb/jupyter浏览器会话中的“运行”选项卡,然后检查控制台上的打开终端并使用ctrl-c关闭来正确地终止ipython笔记本进程。如果可能的话,应避免后者。
如果您运行ipython notebook list并继续在不同端口看到正在运行的ipython服务器,请记下现有笔记本电脑正在提供服务的端口。然后关闭TCP端口:
fuser -k 'port#'/tcp 

我不确定这样做是否涉及其他风险。如果有的话,请告诉我。


5

如果其他方法都无效,可以尝试从任务管理器(如果是Windows系统)中结束pythonw进程。


3
实际上,我相信有一种比使用kill或任务管理器杀死进程更清洁的方法。
在Jupyter Notebook仪表板(您首次启动“jupyter notebook”时看到的浏览器界面)中,浏览到已关闭但其内核可能仍在运行的笔记本文件的位置。
iPython笔记本文件显示为书籍图标,如果有正在运行的内核,则显示为绿色,否则显示为灰色。
只需选择运行文件旁边的复选框,然后单击出现在其上方的Shutdown按钮即可。
这将正确关闭与该特定笔记本相关联的内核。

2

环境


我的操作系统是Ubuntu 16.04,jupyter的版本是4.3.0。

方法


首先,在浏览器的jupyter主页上注销(注销按钮在右上角)

其次,在终端中输入Ctrl + C,会显示如下内容:

[I 15:59:48.407 NotebookApp]interrupted Serving notebooks from local directory: /home/Username 0 active kernels

The Jupyter Notebook is running at: http://localhost:8888/?token=a572c743dfb73eee28538f9a181bf4d9ad412b19fbb96c82

Shutdown this notebook server (y/[n])?

最后一步,输入y并在5秒内确认,如果显示如下内容:

[C 15:59:50.407 NotebookApp] Shutdown confirmed
[I 15:59:50.408 NotebookApp] Shutting down kernels

恭喜!您已成功关闭了jupyter。


2

现在最好的方法是使用“退出”按钮,该按钮位于“注销”按钮左侧。我必须承认,我不理解注销按钮的实用性。但是,我很高兴他们添加了非常有用的退出按钮。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接