screen --version有输出即已安装,否则按发行版执行:ubuntu/debian用sudo apt update && sudo apt install -y screen,centos/rhel 8+用sudo dnf install -y screen,7及更早用sudo yum install -y screen。

直接装完就能用,不用改配置、不依赖 systemd 或 shell 类型——screen 是目前 Linux 上最稳妥的交互式长时任务保活方案。
怎么确认 screen 没装,以及对应安装命令
别猜,先执行 screen --version。有输出说明已装;如果报 command not found,就按发行版装:
- Ubuntu/Debian:
sudo apt update && sudo apt install -y screen - CentOS/RHEL/Rocky Linux 8+:
sudo dnf install -y screen - CentOS/RHEL 7 或更老:
sudo yum install -y screen
注意:部分最小化安装系统(如某些云镜像)默认不带 screen,哪怕 which screen 没输出,也别跳过这步。
为什么必须用 screen -S name 而不是裸跑 screen
不命名的会话在 screen -ls 里只显示一串 PID + .pts-2.host,下次想重连得记数字,极易连错或杀错进程。
- 名字里禁用空格、下划线(
_)、中文,推荐用短横线(-),例如:screen -S db-import-202605 - 想启动即运行命令?直接追加:
screen -S train-job python train.py --epochs 200,命令结束后窗口不会退出,仍可screen -r train-job进去查返回值 - 别写
screen myscript.sh—— 这会创建无名会话,且脚本可能因 stdin 断开而卡住
Ctrl+A, D 是唯一安全脱离方式,其他操作大概率毁任务
脱离(detach)≠ 退出(exit)。按 Ctrl+D 或敲 exit 会干掉整个会话和所有子进程,包括正在导入的 MySQL、训练中的模型。
- 正确流程:先按
Ctrl+A(松开),再按D(大写,即 Shift+d),看到终端输出[detached]才算成功 - 误按了
Ctrl+D?别慌,只要还没登出,立刻执行screen -ls—— 如果会话已消失,说明已被销毁,只能重跑 - 已经断网登出,但不确定是否 detach 成功?登录后先跑
screen -ls,若显示(Detached)就能screen -r name续上;若显示(Attached),说明另一终端还连着,用screen -d -r name强制接管
screen -ls 看到 dead / ??? / 空名字?这些状态怎么处理
screen -ls 不只是列表,它是诊断入口。不同状态对应不同动作,乱 kill -9 可能删掉还在跑的进程。
-
(Detached):正常,直接screen -r name -
(Attached):有人正连着,用screen -d -r name -
Dead ???或一堆问号:socket 文件残留,运行screen -wipe清理 - 只显示 PID 没名字(如
12345.pts-2.host):这是未命名会话,重连必须用完整 PID:screen -r 12345 - 完全没输出,但你知道任务该在跑:检查用户权限 —— 若当初用
sudo screen -S job启动,现在得切回 root 再执行screen -ls
真正容易被忽略的是:screen 进程本身可能被系统 OOM killer 杀掉(尤其内存吃紧时),screen -ls 看不到任何条目,但 ps aux | grep screen 也找不到进程 —— 这时候任务确实已终止,只能从日志或 checkpoint 恢复。











