SSH断开后程序停止是因为终端断连触发SIGHUP信号,tmux和screen通过创建与终端解耦的后台会话解决该问题;tmux功能强、推荐新手,screen轻量、兼容老系统,二者均需命名会话并用detach保留任务。

SSH 会话断开后程序就停,不是因为网络问题,而是因为默认进程绑定在当前终端上,一断就连带收到 SIGHUP 信号被杀掉。tmux 和 screen 的本质作用,是帮你创建一个与终端解耦的独立会话环境——它运行在服务器后台,不依赖你是否连着 SSH。
tmux:现代、功能强、推荐新手从它开始
tmux 是目前主流选择,界面清晰、快捷键统一、支持分屏和多窗口,适合长期运维或跑训练任务。
-
安装(Ubuntu/Debian):
sudo apt install tmux -
新建命名会话:
tmux new -s myjob(myjob可替换成任意名字,比如train或backup) -
运行命令:进入会话后,直接执行你的脚本或命令,例如:
python train.py -
安全分离:按
Ctrl + b松开,再按d(detach),终端显示[detached]即成功挂起 -
重新连接:
tmux attach -t myjob,就能回到刚才的完整环境,包括滚动日志和正在运行的程序 -
查看所有会话:
tmux ls;关闭某会话:tmux kill-session -t myjob
screen:轻量、兼容老系统、操作稍不同
screen 更早出现,资源占用略低,在 CentOS、Rocky 等系统中预装率高,适合快速上手或受限环境。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
安装(Ubuntu):
sudo apt install screen;(CentOS/Rocky):sudo dnf install screen -
新建命名会话:
screen -S mytask -
运行命令:同上,直接输入并执行,比如
tail -f /var/log/syslog -
安全分离:按
Ctrl + a松开,再按d,提示[detached] -
恢复会话:
screen -r mytask;若名字重复,可用screen -ls查看 ID 后用screen -r 12345.mytask -
彻底退出会话:在 screen 内部输入
exit或按Ctrl + d
关键细节别忽略
两个工具都依赖“会话名”管理,命名不是可选,而是必须——尤其当你同时跑多个任务时,没名字容易混淆甚至误连错会话。
- 避免用空格或特殊字符命名,如
my job或train@v2,建议用下划线或短横线:data_download - 分离(detach)≠ 关闭(kill),只要没手动 kill 或 exit,会话就一直活着,哪怕你关机、拔网线、重启本地电脑
- 如果连不上,先确认服务端是否还在运行:
ps aux | grep -E "(tmux|screen)";再检查会话列表是否为空 - tmux 默认前缀是
Ctrl+b,screen 是Ctrl+a,记混会导致按键无效——建议首次使用时贴张便签在显示器边
什么时候该选哪个?
如果你刚接触,优先用 tmux:它的提示更友好、状态栏直观、分屏逻辑更自然;如果你维护的是老旧生产环境(比如 CentOS 7),screen 兼容性更稳,且启动更快。两者核心能力一致——让任务真正“活下来”,而不是靠网络保活勉强撑住。










