无法退出正在运行的 Jupyter Notebook 服务器。

27

我正在使用Jupyter Notebook进行一个项目。由于我在工作时需要通过ssh连接到Linux集群。

ssh -Y -L 8000:localhost:8888 user@host

然后我使用 jupyter notebook --no-browser & 命令启动笔记本,这样我就可以继续使用终端。然后在我的本地机器上打开 localhost:8000 并进行我的工作。

我的问题是我有几次忘记通过在前台运行该进程并使用 Ctrl-C 进行关闭服务器。相反,我只是注销了 ssh 会话。现在当我运行 jupyter notebook list 时,我得到了如下输出:

Currently running servers:
http://localhost:8934/ :: /export/home/jbalsells
http://localhost:8870/ :: /export/home/jbalsells
http://localhost:8892/ :: /export/home/jbalsells
http://localhost:8891/ :: /export/home/jbalsells
http://localhost:8890/ :: /export/home/jbalsells
http://localhost:8889/ :: /export/home/jbalsells
http://localhost:8888/ :: /export/home/jbalsells

显然我不希望所有这些服务器在我的工作机器上运行,但我不知道如何关闭它们!

当我运行ps命令时,没有任何输出:

  PID TTY          TIME CMD
12678 pts/13   00:00:00 bash
22584 pts/13   00:00:00 ps

我已经安装了Jupyter 4.1.0。


这个回答解决了你的问题吗?如何正确关闭IPython Notebook? - Gonçalo Peres
10个回答

27

所以我找到了一个解决方案。

由于jupyter notebook list命令可以告诉你笔记本服务器正在运行的端口,我使用netstat -tulpn来寻找相应的进程ID(PID),我从http://www.cyberciti.biz/faq/what-process-has-open-linux-port/获取了这些信息。

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
PID/Program name    
tcp        0      0 0.0.0.0:8649            0.0.0.0:*               LISTEN      
-                   
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      
-                   
tcp        0      0 0.0.0.0:33483           0.0.0.0:*               LISTEN      
-                   
tcp        0      0 0.0.0.0:5901            0.0.0.0:*               LISTEN      
39125/Xvnc          

没有仔细查找,我就能够从jupyter notebook list中找到我知道应该寻找的端口以及运行它们的进程(如果太难找,你可以使用grep)。然后,我用kill 8337(或相关数字)杀死了它们。


1
有关 Windows 的建议? :) - Roelant
3
最近的更新中似乎可以使用“jupyter notebook stop 8888”来停止在端口8888上运行的笔记本。 - fizzyh2o

17

Windows系统命令在命令提示符下执行。

在终止jupyter笔记本服务器进程之前,请小心保存所有更改。

i) 查找jupyter笔记本服务器使用的端口号。

jupyter notebook list

ex.)

jupyter notebook list
Currently running servers:
http://127.0.0.1:8888/ :: D:\kimkk\Documents\JupyterNotebook

ii) 查找正在使用jupyter笔记本的端口号的进程ID

netstat -ano | find "found portnumber"

ex.)

netstat -ano | find "8888"

  TCP    127.0.0.1:8888         0.0.0.0:0              LISTENING       24140
  TCP    127.0.0.1:8888         127.0.0.1:55588        ESTABLISHED     24140
  TCP    127.0.0.1:8888         127.0.0.1:55612        ESTABLISHED     24140
  TCP    127.0.0.1:55588        127.0.0.1:8888         ESTABLISHED     6492
  TCP    127.0.0.1:55612        127.0.0.1:8888         ESTABLISHED     6492
  • 查找第二列值为"8888"的行。在上面的示例中,第一行、第二行和第三行是目标行。在这些行中,您可以在最后一列中找到PID(例如24140)。

iii) 使用找到的PID结束jupyter笔记本进程

taskkill /PID found_PID /F

ex.)

taskkill /PID 24140 /F
  • /F 表示强制杀死进程。

从版本5.1开始,Jupyter Notebook支持以下停止命令:

jupyter notebook stop 8888

请参考https://github.com/jupyter/notebook/issues/1950


1
请编辑将 "jupyter notebook stop 8888" 置于顶部,这应该是标准答案现在。以下是编程相关内容的中文翻译: - lineage

14
使用以下命令停止在端口8888上运行的Jupyter笔记本:
fuser -k 8888/tcp 

13

这可能会有所帮助:

  1. 运行 jupyter notebook list 命令以获取 jupyter 使用的端口号。
  2. 运行 lsof -n -i4TCP:[端口号] 命令以获取 PID。PID 是输出中的第二个字段。
  3. 运行 kill -9 [PID] 命令以结束该进程。

6

我遇到了同样的问题并按照上面发布的解决方案进行了操作。只是想对解决方案进行一些澄清。

netstat -tulpn

将列出所有活动连接。

tcp    0   0 0.0.0.0:8888  0.0.0.0:*  LISTEN      19524/python

在这种情况下,您需要 PID “19524”。您甚至可以使用以下代码获取要关闭的端口的 PID。

fuser 8888/tcp

这将给你同样的19524。
kill 19524

将关闭该端口


你的方法更加简洁和有帮助。 - Pengju Zhao

1

第3.3节应适用于此。 http://jupyter-notebook-beginner-guide.readthedocs.io/en/latest/execute.html

打开笔记本时,其“计算引擎”(称为内核)会自动启动。关闭笔记本浏览器选项卡不会关闭内核,而是内核将继续运行,直到明确关闭。

要关闭内核,请转到相关的笔记本,并单击菜单文件 -> 关闭并停止。或者,笔记本仪表板具有名为Running的选项卡,显示所有正在运行的笔记本(即内核),并允许关闭它们(通过单击Shutdown按钮)。


3
我不想关闭笔记本电脑,而是服务器(被称为Jupyter Notebook应用程序)。 - Joalito
@Joalito 抱歉我误解了。 - Ceddrick

1
这是一个基于@Joalito和@Hongsoog的答案,可以一次性关闭所有活动的Jupyter笔记本服务器的Bash脚本:
#!/bin/bash
jupyter notebook list | {
  while IFS= read -r line
  do
    port=`echo "$line" | grep -o -P '(?<=localhost:).*(?=/ :)'`
    echo "killing jn in port $port"
    if [ -z "$port" ]
    then
      netstat -tulpn | grep "$port" | grep -o -P '(?<=LISTEN      ).*(?=/py)' | xargs kill -15
    fi
  done
}

0
在您的笔记本上,欢迎页面被命名为“文件”,旁边可以看到“运行”字样。这就是您想要关闭并查看正在运行的笔记本的地方。

1
这并没有回答问题...请看前一个回答的评论。 - MrBean Bremen
哦,我的错,我误解了。 - tariksalay

0

对我有用的是

  1. jupyter notebook list,在我的情况下返回:
http://localhost:8889/?token=77d01d687da830b74eba946060660d :: /gpfs/blah/
http://localhost:8889/?token=1243162854ee3648e3154b26643794 :: /ifs/hello/world/
  • netstat -tulpn | grep "8888",在我的情况下返回:
  • tcp        7      0 127.0.0.1:8888          0.0.0.0:*               LISTEN      17602/python3.9
    

    我在最后一列找到了PID:17602

    1. kill -9 17602,这将释放端口。

    0
    现在,有一个本地的Jupyter命令可以停止Jupyter服务器:
    对于Jupyter Notebook:
    jupyter notebook stop [port]
    

    对于JupyterLab:
    jupyter server stop [port]
    

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