新手Linux Screen 完整使用指南

2,416 阅读4分钟

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