screen 是一款经典的终端复用器(Terminal Multiplexer),其最大价值在于:即使你的 SSH 连接断开、网络波动或关闭终端窗口,在其中运行的长时任务(如模型训练、数据拷贝、服务编译)也不会中断。你可以随时重新连接,恢复之前的工作界面。
📦 安装
# Debian / Ubuntu
sudo apt install screen
# RHEL / CentOS / Fedora
sudo yum install screen # 或 dnf install screen
# macOS (Homebrew)
brew install screenscreen 是一款经典的终端复用器(Terminal Multiplexer),其最大价值在于:即使你的 SSH 连接断开、网络波动或关闭终端窗口,在其中运行的长时任务(如模型训练、数据拷贝、服务编译)也不会中断。你可以随时重新连接,恢复之前的工作界面。
📦 安装
# Debian / Ubuntu
sudo apt install screen
# RHEL / CentOS / Fedora
sudo yum install screen # 或 dnf install screen
# macOS (Homebrew)
brew install screen🚀 基础工作流(三步走)
1. 创建会话
screen -S session_name-S必须大写,用于为会话指定一个有意义的名称(如train、copy_log)。- 执行后你会进入一个新的终端,看起来和普通 shell 一模一样。
2. 在会话中运行任务
正常执行任何命令,例如:
python train.py --epochs 100
tail -f /var/log/syslog任务会在这个 screen 会话中运行。
3. 分离会话(Detach)
快捷键:Ctrl + a,松开,再按 d。
- 你会回到创建会话前的终端,而
screen会话及其内部任务继续在后台运行。 - 分离后,终端会显示类似
[detached from 12345.session_name]的信息。
4. 重新连接会话
# 列出所有活跃会话
screen -ls
# 重连指定会话(通过名称或 ID)
screen -r session_name
screen -r 12345 # 使用 screen -ls 看到的 ID⌨️ 核心快捷键大全
所有 screen 快捷键都以 Ctrl + a 为前缀(先按 Ctrl+a,释放后再按下一个键)。
| 快捷键 | 功能说明 |
|---|---|
Ctrl+a c |
创建新窗口(在当前会话中新建一个终端窗口) |
Ctrl+a " |
列出所有窗口,用方向键选择并切换 |
Ctrl+a n |
切换到 下一个 窗口 |
Ctrl+a p |
切换到 上一个 窗口 |
Ctrl+a A |
重命名当前窗口(给窗口起一个便于识别的名字) |
Ctrl+a d |
分离当前会话(回到外层终端) |
Ctrl+a [ |
进入 复制/滚动模式(可用方向键或 PageUp/Down 翻页) |
Ctrl+a ] |
粘贴 之前复制的内容 |
Ctrl+a ? |
显示所有快捷键帮助 |
Ctrl+a S |
水平分割窗口(Split horizontally) |
Ctrl+a | |
垂直分割窗口(Split vertically,部分版本支持) |
Ctrl+a Tab |
在分割的区域间切换焦点 |
Ctrl+a X |
关闭当前分屏区域(不关闭窗口) |
Ctrl+a Q |
关闭所有分屏,只保留当前窗口 |
提示:复制/滚动模式中,按
Space开始选择文本,再按Space结束选择并复制到缓冲区,随后用Ctrl+a]粘贴。
🔧 高级用法与常见场景
1. 窗口管理(在一个会话中多任务)
- 创建多个窗口:
Ctrl+ac(可创建多个) - 窗口间快速切换:
Ctrl+an/p - 查看所有窗口列表:
Ctrl+a"(弹出一个可交互列表)
2. 分屏操作
- 水平分割:
Ctrl+aS - 垂直分割:
Ctrl+a|(注意是管道符,有时需要 Shift+\) - 在分屏间跳转:
Ctrl+aTab - 每个分屏可以显示不同窗口内容,或通过
Ctrl+ac在分屏中再创建新窗口。
3. 会话共享(多用户协作)
如果多个用户登录同一台机器,可让两人同时接入同一个 screen 会话(需设置多用户模式,此处略,但基础用法是加上 -x 参数):
screen -x session_name # 共享会话(只读+可写)4. 强制分离远端已连接的会话
当你尝试 screen -r 时提示 There is no screen to be resumed matching ... 或会话状态为 Attached 时,说明该会话被其他终端占用(可能因网络闪断而卡住),可强制分离:
screen -d -r session_name这会先分离远端“僵尸”连接,再将你重新连上。
5. 彻底关闭会话
- 在窗口内输入
exit或按Ctrl+d,会关闭当前窗口;若会话内所有窗口都关闭,则会话结束。 - 从外部强制结束整个会话:
screen -X -S session_name quit⚠️ 故障排查
| 现象 | 解决办法 |
|---|---|
screen -r 无法重连,提示 Attached |
使用 screen -d -r session_name 强制分离并重连 |
| 忘记会话名称 | screen -ls 列出所有会话及其 ID/名称 |
| 想挂起当前窗口但不想分离 | Ctrl+a z 会将当前窗口放到后台(fg 可恢复) |
| 滚动查看历史输出 | 进入复制模式 Ctrl+a [,然后用方向键或 PgUp/PgDn 滚动 |
| 不小心关闭了终端,会话还在吗? | 在,screen 设计初衷就是为了应对断线,重连即可 |
screen -S 报错 -S: command not found |
说明未安装 screen,请先安装 |
🧠 常见误区澄清
-S必须大写:用于命名会话;小写-s用于指定默认 shell(几乎用不到)。
✅screen -S mytask
❌screen -s mytask(这会让 screen 尝试用mytask作为 shell 程序,会失败)chmod -R和screen无关:不要在/etc/nginx等系统目录滥用777权限,这会导致服务启动失败,但这不是screen的问题。
📝 快速参考卡片
# 创建
screen -S name
# 分离
Ctrl+a d
# 列出
screen -ls
# 重连
screen -r name
# 强制重连
screen -d -r name
# 关闭
screen -X -S name quit
# 新建窗口(会话内)
Ctrl+a c
# 切换窗口
Ctrl+a n / p
# 分屏
Ctrl+a S # 水平
Ctrl+a | # 垂直🔗 延伸阅读
- 官方手册:
man screen - 在线 cheat sheet:https://www.gnu.org/software/screen/manual/screen.html
记录时间:2026-09-04
适用环境:Linux / macOS / WSL