繁体   English   中英

无法退出正在运行的 jupyter notebook 服务器

[英]cannot quit jupyter notebook server running

我正在为一个项目使用 Jupyter Notebook。 因为我在工作时将 ssh 变成了 linux 集群,所以我使用

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

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

我的问题是我多次忘记通过将进程置于前台并使用Ctrl-C将其终止来关闭服务器。 相反,我只是退出了 ssh session。现在,当我运行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。

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

由于jupyter notebook list告诉您笔记本服务器在哪些端口上运行,因此我使用netstat -tulpn查找 PID 我从http://www.cyberciti.biz/faq/what-process-has-open-linux-获得信息 端口/

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 (或任何相关的数字)杀死了它们。

命令提示符上的 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

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

fuser -k 8888/tcp 

这可能有帮助:

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

我遇到了同样的问题并遵循了上面发布的解决方案。 只是想稍微澄清一下解决方案。

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

将关闭端口

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

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

要关闭内核,请转到关联的笔记本并单击菜单 File -> Close and Halt。 或者,Notebook Dashboard 有一个名为 Running 的选项卡,显示所有正在运行的 notebook(即内核)并允许关闭它们(通过单击 Shutdown 按钮)。

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

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

在你的笔记本上,欢迎页面被命名为“文件”,你可以在它旁边看到“正在运行”。 您可以在此处关闭并查看正在运行的笔记本

对我有用的是

  1. jupyter notebook list ,在我的例子中返回:
http://localhost:8889/?token=77d01d687da830b74eba946060660d :: /gpfs/blah/
http://localhost:8889/?token=1243162854ee3648e3154b26643794 :: /ifs/hello/world/
  1. netstat -tulpn | grep "8888" 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 ,释放端口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM