<p>Kernel → Interrupt 会中断当前执行但不重启内核,是最常用且最轻量的手动停止方式,向内核发送 SIGINT 信号,等效于终端中 Ctrl+C,成功后单元格左侧 * 消失,变量和已定义对象均保留。</p>

Kernel → Interrupt 会中断当前执行,但不重启内核
这是最常用也最轻量的手动停止方式。当你在某个单元格里跑着一个死循环、time.sleep(100) 或者卡住的 I/O 操作时,点击菜单栏 Kernel → Interrupt(或按快捷键 Ctrl+M 后松开再按 I,前提是已进入命令模式),Jupyter 会向内核发送 SIGINT 信号,效果等同于在终端里按 Ctrl+C。
- 成功中断后,单元格左侧行号旁会显示
*,表示“正在运行中”状态被取消,但内核仍存活 - 变量、导入的模块、已定义的函数都还在,下次运行不会丢失上下文
- 如果代码对
KeyboardInterrupt做了捕获且没重新抛出(比如try: ... except KeyboardInterrupt: pass),Interrupt可能无效——这时就得用更彻底的方式
连续按两次 I 是 Jupyter Lab / Notebook 的快捷中断方式
在命令模式下(单元格边框为蓝色,非绿色编辑态),选中正在运行的单元格,快速连按两次 I 键,等效于菜单里的 Kernel → Interrupt。注意不是 Shift+I 或 Ctrl+I,就是原生 I 键两次。
- 第一次
I进入命令模式(如果不在的话) - 第二次
I触发中断;如果已经处于命令模式,直接按两次I即可 - 部分旧版 Jupyter(如 6.x)可能需要先按
Esc确保退出编辑态,再按I I
Kernel → Restart 会清空全部状态,慎用
当 Interrupt 失效,或者你怀疑内核已陷入不可恢复状态(比如内存爆满、线程锁死、C 扩展崩溃),就只能重启内核:Kernel → Restart(快捷键 0 0,即数字零连按两次)。
- 重启后所有变量、导入、临时定义都会丢失,相当于新开一个 Python 解释器
- 已运行过的单元格不会自动重跑,必须手动逐个执行(注意依赖顺序)
- 如果 notebook 里有长耗时初始化(如加载大模型、连接数据库),重启后得重新来一遍
- 某些远程内核(如 JupyterHub 或 DataSpell 连接的集群内核)重启可能触发权限检查或资源重建,延迟明显
终端里 Ctrl+C 是终止整个 notebook 服务的最后手段
如果你是在终端里用 jupyter notebook 命令启动的服务,而网页端完全无响应(连菜单都点不动),那就回到启动它的终端窗口,按 Ctrl+C —— 注意是连按两次,第一次停服务器,第二次跳过确认直接关。
- 这会杀掉整个 Jupyter server 进程,所有打开的 notebook 页面都会断连
- 未保存的修改(.ipynb 文件内容、未写入磁盘的输出)会丢失,务必先手动
File → Save and Checkpoint - 后台 kernel 进程通常随 server 一起结束,但极少数情况(如 kernel crash 后残留)需额外用
ps aux | grep jupyter+kill -9清理
真正容易被忽略的是:中断只作用于当前活跃 kernel,而 notebook 里可能同时存在多个 kernel 实例(比如用了 %%script bash 或嵌套子进程),它们不受 Kernel → Interrupt 影响。这种情况下,得进终端查 ps 或改代码加超时控制。


















