直接用 screen -r 可恢复 Detached 状态的会话,需先执行 screen -ls 确认状态:Detached 可恢复,Dead 或 No Sockets found 则不可;推荐用会话名恢复(如 screen -r myjob),名字重复时用完整标识(如 screen -r 12345.myjob),被占用时加 -d -r 强制接管。

直接用 screen -r 就能恢复——前提是会话确实处于“Detached”状态,没被系统清理或意外终止。
确认会话是否还在
先执行 screen -ls 查看当前所有 screen 会话。正常输出类似:
- 12345.myjob (Detached) —— 表示可安全恢复
- There is a screen on: ... (Dead) —— 说明会话已崩溃,无法恢复
- No Sockets found —— 没有活动会话,需重新创建
用名字或 PID 恢复会话
推荐优先使用会话名,避免 PID 变化带来的混淆:
- 恢复名为 myjob 的会话:screen -r myjob
- 如果名字重复(比如两个都叫 myjob),就用完整标识:screen -r 12345.myjob
- 若提示 “There is a screen on … but it is attached”,说明别人正连着,或你上次没正确 detach —— 强制接管:screen -d -r myjob
常见恢复失败原因
不是命令不对,而是底层状态出了问题:
- 程序自己崩溃退出了(比如 Python 脚本报错后结束),screen 会话随之终止
- 误按了 Ctrl+A, K(杀窗口)或 Ctrl+A, \(杀整个会话)
- 系统设置了短时自动登出(如 TMOUT=300),导致 shell 被强制退出
- 残留 socket 文件卡住,可手动清理:rm -f /var/run/screen/S-$(whoami)/*
小技巧:让恢复更稳
新建会话时养成习惯,能大幅减少恢复障碍:
- 始终用 screen -S 有意义的名字(如 deploy、logwatch)
- 运行关键脚本前加 set -o ignoreeof,防误按 Ctrl+D 退出 shell
- 需要日志留痕?启动时加 -L 参数:screen -S backup -L,日志默认存为 screenlog.0


















