【Linux】screen 命令创建会话 保持后台运行

【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 分钟上手流程

  1. 创建带名字的会话(强烈推荐命名,便于管理多个任务)
   screen -S mytask          # 创建名为 mytask 的会话
   # 或者直接带命令启动(推荐用于长期任务)
   screen -S train python train.py --epochs 100

进入后你会看到一个新终端,左下角通常显示 [screen 0: bash] 或类似。

  1. 在里面跑你的程序
    随便跑:训练模型、爬虫、下载、ffmpeg 转码、tail -f 日志 等。
    程序启动后别急着关终端。
  2. 分离会话 → 放到后台运行(核心操作!) 按键组合:Ctrl + a (先按住 Ctrl 再按 a,然后都松开)
    再按 d 屏幕显示:[detached from 12345.mytask]
    → 这时你已经安全回到原终端,程序还在后台跑,即使你直接 exit 退出 SSH 也没事。
  3. 查看所有 screen 会话
   screen -ls

示例输出:

   There are screens on:
       12345.mytask    (Detached)
       67890.download  (Detached)
   2 Sockets in /run/screen/S-user.
  • Detached:后台运行中(我们想要的)
  • Attached:当前有人连着
  1. 重新连回会话(随时恢复)
   screen -r mytask          # 按名字恢复(推荐)
   # 或
   screen -r 12345           # 按 ID 恢复(当名字重复时用)

恢复后你会看到程序还在继续运行,输出还在滚动。

  1. 彻底退出会话(任务完成后) 在 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 名字一键抢回会话(常用)
完全退出当前会话exitCtrl + d关闭 screen,里面进程也停止
在会话里新建窗口Ctrl + a 然后 c像 tmux 一样开新标签
切换窗口Ctrl + a 然后 n/pnext / previous
杀掉某个会话(不进入)screen -S 名字 -X quit远程杀死后台会话

四、进阶实用场景示例

  1. 后台跑训练 / 推理,断线不怕
   screen -S llm-finetune
   # 进入后:
   python finetune.py --model llama3 --data ./dataset
   # 跑起来后 Ctrl+a d 分离
   # 断开 SSH 也没事,明天再连:
   ssh user@server
   screen -r llm-finetune   # 继续看进度
  1. 后台下载大文件
   screen -S big-download wget -c https://hugefile.tar.gz
   Ctrl+a d
  1. 后台跑服务 / 脚本循环
   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-8zh_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 替代方案。

文章已创建 4791

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部