已安装screen后,执行screen -S name创建命名会话,再按Ctrl+A+D分离,即可使任务脱离SSH生命周期持续运行;未安装时需根据发行版用apt/yum/dnf安装,并通过screen --version验证。

直接用 screen -S 创建命名会话,再按 Ctrl+a d 分离,就能让任务脱离 SSH 生命周期持续运行——这是最可靠、最低侵入的会话持久化方式,不需要改脚本、不依赖 nohup 或 &。
怎么确认 screen 已安装并创建新会话
很多发行版默认带 screen,但精简系统(如某些 Docker 镜像或 Alpine)可能没有。别猜,直接验证:
- 运行
screen --version或which screen;无输出就说明没装 - Ubuntu/Debian:用
sudo apt install screen - CentOS/RHEL/Rocky:用
sudo yum install screen或sudo dnf install screen - 创建带名字的会话(强烈推荐命名):
screen -S deploy,名字能帮你后续快速识别用途
执行后终端清屏,你就已进入新会话——此时所有命令都在这个隔离环境中运行,和当前 SSH 连接解耦。
分离会话时为什么必须按 Ctrl+a d,不能只关终端
只关闭终端或断开 SSH,会向 shell 发送 SIGHUP,导致子进程被一并终止。Ctrl+a d 是 screen 的 detach 操作,它:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 不发 SIGHUP,所有子进程继续跑在
screen托管的伪终端里 - 会话状态变成
Detached,PID 仍存在(可用ps aux | grep SCREEN看到) - 终端返回到原始 shell,你可以安全退出、重连、甚至换设备操作
- 误按
Ctrl+c或直接输exit会杀掉整个会话,不是分离
恢复会话前必须先 screen -ls,否则容易连错或报错
screen -ls 不是可选项,是必走步骤。原因很实际:
- 输出类似
12345.deploy (Detached),告诉你 PID 和名称是否匹配 - 如果显示
There is a screen on: ... (Attached),说明别人正连着,得用screen -d -r deploy强制接管 - 如果名字重复(比如两次
screen -S deploy),screen -r deploy会报错,必须用完整 ID:screen -r 12345.deploy - 输出为
No Sockets found?说明会话已结束或根本没启动成功,别硬试-r
退出会话和彻底清理的正确姿势
很多人卡在“怎么才算真正结束”,结果残留僵尸会话:
- 在会话内输
exit,或按Ctrl+d,这是干净退出:shell 结束 →screen进程退出 → 会话从screen -ls列表消失 - 若进程卡死、无法响应
exit,可用screen -S deploy -X quit强制销毁(慎用,不等程序收尾) - 别用
kill -9杀screen进程,可能导致伪终端残留、下次screen -ls显示异常 socket - 极少数情况
screen -ls显示 dead socket,用screen -wipe清理(只对已崩溃的残留有效)
真正的持久化不在于“永远不关”,而在于“可控地挂起与恢复”——名字写错、忘记 -ls、混淆 -r 和 -d -r,这三处最容易浪费半小时排查。










