无法退出 jupyter 笔记本服务器 运行

cannot quit jupyter notebook server running

我正在为一个项目使用 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。

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

When a notebook is opened, its “computational engine” (called the kernel) is automatically started. Closing the notebook browser tab, will not shut down the kernel, instead the kernel will keep running until is explicitly shut down.

To shut down a kernel, go to the associated notebook and click on menu File -> Close and Halt. Alternatively, the Notebook Dashboard has a tab named Running that shows all the running notebooks (i.e. kernels) and allows shutting them down (by clicking on a Shutdown button).

所以我找到了解决办法。

因为 jupyter notebook list 告诉你笔记本服务器 运行 在哪些端口上 我使用 netstat -tulpn 查找 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(或关联的任何数字)。

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

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

将关闭端口

Windows 命令提示符下的系统命令

在终止 jupyter notebook 服务器进程之前,请小心保存在 notebook 中所做的所有更改。

i) 找到jupyter notebook服务器使用的端口号

jupyter notebook list

例)

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

ii) 查找使用找到的jupyter notebook端口号的进程id

netstat -ano | find "found portnumber"

例)

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 notebook 进程

taskkill /PID found_PID /F

例)

taskkill /PID 24140 /F
  • /F表示强行杀掉进程

仅供参考,Jupyter Notebook 从 5.1 版开始支持如下停止命令:

jupyter notebook stop 8888

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

这可能有帮助:

  1. 运行 jupyter notebook list 获取jupyter使用的端口号。
  2. 运行 lsof -n -i4TCP:[port-number] 获取 PID。 PID 是输出中的第二个字段。
  3. 运行 kill -9 [PID] 终止这个进程。

使用以下命令在端口 8888 上停止 Jupyter notebook 运行:

fuser -k 8888/tcp 

在您的笔记本上,欢迎页面名为 "Files",您可以在其旁边看到 "Running"。您可能希望在此处关闭并查看 运行 notebooks

根据@Joalito 和@Hongsoog 给出的答案,这是一个 bash 脚本,可以一次性杀死所有活动的 Jupyter notebook 服务器:

#!/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
}