【Linux】screen 命令:创建会话 + 保持后台运行完整指南
(2026年最新实用版,适用于 CentOS / Ubuntu / Debian / Rocky 等主流发行版)
screen 是 Linux 最经典的终端多路复用器,核心价值就是:即使 SSH 断开、网络波动、关掉终端,里面的程序也能继续在后台运行,随时重新连上恢复(远超 nohup & 的体验)。
一、安装 screen(如果没有)
# Ubuntu / Debian
sudo apt update
sudo apt install screen
# CentOS / Rocky / AlmaLinux / Fedora
sudo dnf install screen # 或 yum install screen(老系统)
# Arch / Manjaro
sudo pacman -S screen
安装后输入 screen --version 确认(当前主流版本 4.9.x 或更高)。
二、最常用 / 最推荐的 5 分钟上手流程
- 创建带名字的会话(强烈推荐命名,便于管理多个任务)
screen -S mytask # 创建名为 mytask 的会话
# 或者直接带命令启动(推荐用于长期任务)
screen -S train python train.py --epochs 100
进入后你会看到一个新终端,左下角通常显示 [screen 0: bash] 或类似。
- 在里面跑你的程序
随便跑:训练模型、爬虫、下载、ffmpeg 转码、tail -f 日志 等。
程序启动后别急着关终端。 - 分离会话 → 放到后台运行(核心操作!) 按键组合:Ctrl + a (先按住 Ctrl 再按 a,然后都松开)
再按 d 屏幕显示:[detached from 12345.mytask]
→ 这时你已经安全回到原终端,程序还在后台跑,即使你直接exit退出 SSH 也没事。 - 查看所有 screen 会话
screen -ls
示例输出:
There are screens on:
12345.mytask (Detached)
67890.download (Detached)
2 Sockets in /run/screen/S-user.
- Detached:后台运行中(我们想要的)
- Attached:当前有人连着
- 重新连回会话(随时恢复)
screen -r mytask # 按名字恢复(推荐)
# 或
screen -r 12345 # 按 ID 恢复(当名字重复时用)
恢复后你会看到程序还在继续运行,输出还在滚动。
- 彻底退出会话(任务完成后) 在 screen 里面输入:
exit
或按 Ctrl + d
看到 [screen is terminating] 说明会话已关闭,进程也停止。
三、常用组合速查表(背下来用得最多)
| 操作 | 命令 / 快捷键 | 说明 |
|---|---|---|
| 创建命名会话 | screen -S 名字 | 最常用方式 |
| 创建并直接跑命令 | screen -S 名字 yourcmd | 一条命令启动后台任务 |
| 分离(后台运行) | Ctrl + a 然后 d | 核心快捷键,断网也不怕 |
| 查看所有会话 | screen -ls | 列出 Attached / Detached 状态 |
| 恢复指定会话 | screen -r 名字或ID | 重新连上 |
| 强制 detach 别人会话 | screen -d 名字 | 如果被别人 attach 了,先踢掉再 -r |
| 强制 detach 并恢复 | screen -d -r 名字 | 一键抢回会话(常用) |
| 完全退出当前会话 | exit 或 Ctrl + d | 关闭 screen,里面进程也停止 |
| 在会话里新建窗口 | Ctrl + a 然后 c | 像 tmux 一样开新标签 |
| 切换窗口 | Ctrl + a 然后 n/p | next / previous |
| 杀掉某个会话(不进入) | screen -S 名字 -X quit | 远程杀死后台会话 |
四、进阶实用场景示例
- 后台跑训练 / 推理,断线不怕
screen -S llm-finetune
# 进入后:
python finetune.py --model llama3 --data ./dataset
# 跑起来后 Ctrl+a d 分离
# 断开 SSH 也没事,明天再连:
ssh user@server
screen -r llm-finetune # 继续看进度
- 后台下载大文件
screen -S big-download wget -c https://hugefile.tar.gz
Ctrl+a d
- 后台跑服务 / 脚本循环
screen -S monitor bash -c 'while true; do ./check.sh; sleep 60; done'
五、常见问题 & 注意(2026 年最新)
- 为什么我 screen -r 报错 “There is no screen to be resumed”?
→ 用screen -ls先看有没有,名字/ID 是否正确。 - 多个同名会话怎么办?
→ 用 ID 恢复:screen -r 12345.pts-0.server - screen 里中文乱码?
→ 确保服务器 locale 是 UTF-8:export LANG=en_US.UTF-8或zh_CN.UTF-8,然后重进 screen。 - screen vs tmux vs nohup?
- screen:简单、轻量、历史悠久,几乎所有服务器都有
- tmux:更现代、分屏强、配置灵活(推荐新手学 tmux)
- nohup:最原始,只能防挂起,不能恢复终端输出
→ 轻量任务用 screen,重度管理用 tmux。 - screen 默认不记录滚动历史?
→ 进入会话后 Ctrl + a 然后 Esc 进入 copy 模式,用上下箭头翻看历史,按 Esc 退出。
掌握 screen 后,你的远程任务再也不会因为网络抖动而中断了。
你现在是用 screen 跑什么任务?训练模型?爬数据?部署服务?还是单纯想防 SSH 掉线?
告诉我具体场景,我可以给你更精确的命令组合或 tmux 替代方案。