screen能解决ssh断开导致任务中断的问题,关键在于正确安装、用-s命名会话、在会话内按ctrl+a再按d分离(而非直接关终端),否则进程仍会被sighup信号终止。

screen 能解决 SSH 断开、终端关闭导致命令中断的问题,但必须正确安装、命名会话、分离(detach)而非直接关窗口,否则进程照样被杀。
确认系统是否已安装 screen
别急着装,先检查。很多 CentOS/Rocky/AlmaLinux 镜像默认带 screen,Ubuntu 22.04+ 也常预装:
- 运行
screen --version—— 有输出(如Screen version 4.9.0)说明已就绪 - 若提示
command not found,再按发行版装:
Ubuntu/Debian:sudo apt update && sudo apt install screen
CentOS/Rocky/AlmaLinux:sudo dnf install screen(旧版用yum install screen) - 装完务必再跑一次
screen --version,避免因缓存或 PATH 问题误判
启动带名字的会话并运行程序
不加 -S 直接敲 screen 会创建无名会话,后续 screen -ls 看到的是一串 PID,极易混淆或误杀。
- 用
screen -S fsapp_hh启动 —— 名字要能一眼看出用途(比如服务名、脚本路径缩写) - 进会话后,先激活虚拟环境再跑程序:
source feishu_env/bin/activate && python ~/GenericAgent/frontends/fsapp.py - 此时程序已在 screen 保护下运行,但还没“后台化”——你仍处于交互态,关终端还是会断
正确分离(detach)而不是关闭终端
这是最常踩的坑:很多人以为程序跑起来就完事了,直接关 SSH 窗口。实际只要终端进程退出,未 detach 的 screen 会话也会被连带终止。
- 在 screen 会话中,按
Ctrl + A松开,再按d—— 屏幕会显示[detached],这才是安全分离 - 此时可放心关终端、断 SSH,
fsapp_hh进程仍在后台持续运行 - 验证是否真 detached:
screen -ls应显示类似11589.fsapp_hh (Detached),不是(Attached)
恢复、清理和常见错误处理
会话长期运行后,可能遇到 dead 状态、重复 attach、或忘记名字等情况。
- 恢复会话:
screen -r fsapp_hh(用名字)或screen -r 11589(用 PID),不要漏掉-r - 如果提示
There is a screen on ... There is no screen to be resumed matching ...,大概率是会话已死或被 kill,先执行screen -wipe清理残留 - 想彻底结束某个会话:先
screen -r fsapp_hh进去,再在其中输exit;或从外面用kill -9 11589(谨慎!只对非响应会话用) - 注意:不要在未 detach 时直接关终端,也不要对正在运行的会话用
screen -d(它只是强制离线,不终止,但易引发状态混乱)
真正关键的只有三步:命名启动 → Ctrl+A d 分离 → screen -r 恢复。名字和 detach 动作缺一不可,其他都是补救手段。











