Screen 使用指南
screen 是一个强大的终端复用工具,允许用户在同一终端会话中运行多个任务,并在断开连接后继续保持后台运行。它非常适合用于远程服务器任务、长时间计算、集群作业监控等场景。
1️⃣ 创建新的 Screen 会话
screen -S [会话名]
例如:
screen -S mysession
这将创建一个名为 mysession 的新的 screen 会话。
2️⃣ 断开当前 Screen 会话(后台运行)
在 screen 会话中,按下:
Ctrl + A 然后按 D
即可从当前会话中断开(detach),但会话将继续在后台运行。
断开后,任务不会被中断,即使你关闭 SSH 连接。
3️⃣ 查看当前的 Screen 会话
screen -ls
输出示例:
There are screens on:
1234.mysession (Detached)
5678.train (Detached)
2 Sockets in /run/screen/S-user.
4️⃣ 恢复指定的 Screen 会话
screen -r [会话名或会话ID]
例如:
screen -r 1234
如果系统提示 “There is no screen to be resumed.”
说明该会话可能已退出或被异常占用,可使用 screen -wipe 清理(见下文)。
5️⃣ 强制终止指定会话
screen -X -S [会话名或ID] quit
例如:
screen -X -S mysession quit
这将直接关闭该会话(无法复原)。
💡 另一种方式是在会话中直接输入:
exit若未生效可重复输入几次,确保彻底退出。
6️⃣ 查看历史输出(滚动模式)
在会话中:
Ctrl + A 然后按 Esc
即可进入复制/滚动模式,可使用:
- 方向键 / PageUp / PageDown 滚动查看历史内容
- 再次按
Esc退出滚动模式
7️⃣ 多窗口操作
在 screen 中可以创建多个窗口(相当于多个子终端):
- 创建新窗口:
Ctrl + A后按C - 切换到下一个窗口:
Ctrl + A后按N - 切换到上一个窗口:
Ctrl + A后按P - 直接跳转到第 n 个窗口:
Ctrl + A后按数字键(1、2、3...) - 重命名当前窗口:
Ctrl + A后按A
8️⃣ 分屏操作
- 分割屏幕上下两部分:
Ctrl + A后按S - 切换活动分屏:
Ctrl + A后按Tab - 取消分屏:
Ctrl + A后按Q
9️⃣ 关闭当前窗口 / 会话
- 关闭当前窗口:
Ctrl + D或输入exit - 如果这是最后一个窗口,则整个
screen会话也会退出。
🔟 自动创建并提交任务(非交互模式)
可以直接让任务在后台自动运行,无需手动进入会话。
✅ 基本用法
screen -dmS train bash -c "python train.py > train.log 2>&1"
-d -m:在后台创建会话(不进入)-S train:设置会话名称bash -c "...":执行命令后自动退出> train.log 2>&1:将输出重定向到日志
⚠️ 若需要使用 Conda 环境(重点)
非交互式 bash 不会自动加载 conda,需要手动激活:
✅ 推荐写法(稳定)
screen -dmS train bash -c "source ~/miniforge3/etc/profile.d/conda.sh && conda activate myenv && python train.py > train.log 2>&1"
或:
✅ 使用交互式 bash
screen -dmS train bash -i -c "conda activate myenv && python train.py > train.log 2>&1"
或:
✅ 写脚本再提交
创建脚本 run_train.sh:
#!/bin/bash
source ~/miniforge3/etc/profile.d/conda.sh
conda activate myenv
python train.py > train.log 2>&1
后台提交:
screen -dmS train bash run_train.sh
11️⃣ 清理与附加模式
清理无效会话
如果某些会话卡死或无法恢复:
screen -wipe
多终端附加同一会话(多人协作)
screen -x mysession
多个终端可同时查看/操作同一任务。
12️⃣ 日志与持久化记录
手动开启日志记录:
进入会话后:
Ctrl + A H
即可开始/停止日志记录,文件名默认 screenlog.0。
在配置文件中自动记录日志:
编辑 ~/.screenrc:
defscrollback 10000
logfile /tmp/screen_%n.log
log on
caption always "%{= kw} %-w%{= BW}%n %t%{-}%+w"
13️⃣ 快捷键速查表
| 功能 | 快捷键 |
|---|---|
| 新建窗口 | Ctrl + A, C |
| 切换窗口 | Ctrl + A, N / P |
| 分屏上下 | Ctrl + A, S |
| 分屏切换 | Ctrl + A, Tab |
| 滚动模式 | Ctrl + A, Esc |
| 重命名窗口 | Ctrl + A, A |
| 开/停日志 | Ctrl + A, H |
| 帮助菜单 | Ctrl + A, ? |
| 退出会话 | Ctrl + A, D 或 exit |
14️⃣ 查看详细手册
如需更多信息:
man screen
✅ 总结
| 场景 | 推荐命令 |
|---|---|
| 创建并进入会话 | screen -S myjob |
| 后台运行任务 | screen -dmS myjob bash -c "python task.py" |
| 恢复会话 | screen -r myjob |
| 清理无效会话 | screen -wipe |
| Conda 任务提交 | source conda.sh && conda activate env |
| 开启日志 | Ctrl + A, H |