第 49 课:tmux、WezTerm 与长任务工作流
🎯 核心实操目标
通关要求:解决"SSH 断线丢进度"与"多窗口并行任务"两大科研痛点。本课你将掌握 tmux 终端复用器的核心操作(创建会话/分屏/挂起/恢复),学会用 WezTerm 替代默认终端,建立"早上提交任务 → 关电脑 → 第二天回来取结果"的可靠长任务工作流。
📋 课前准备(5 分钟自检)
工具/环境(按操作系统)
Linux / Mac
- [ ] tmux 通常已预装:
tmux -V(应返回版本号) - [ ] 未安装时:Mac 用
brew install tmux;Ubuntu 用sudo apt install tmux
Windows
- [ ] tmux 不能原生运行 → 用 WSL2(Windows Subsystem for Linux):learn.microsoft.com/wsl/install
- [ ] 安装 Ubuntu/Debian WSL 发行版后,再装 tmux
WezTerm(跨平台现代终端,可选但推荐)
- [ ] 下载:wezfurlong.org/wezterm/install
- [ ] 内置 GPU 加速、Lua 配置、多 Tab、跨平台一致
应急通道
- 不想装 tmux → 用 screen(Linux/Mac 常预装)作为简化替代
- WSL 安装受网络问题阻挠 → 用云服务器(阿里云/腾讯云 ECS)+ SSH 临时演示
- 实在没有终端环境 → 用 Google Cloud Shell(浏览器内 Linux 终端)
场景痛点破冰:SSH 断线毁掉一夜跑出的模型
"你晚上 9 点 SSH 到学校服务器上启动了一个深度学习训练任务,预计跑 8 小时。 你想到学校 23 点要断电,赶紧把笔记本盖上回宿舍。 第二天早上打开电脑,看到的是冷冰冰的
Connection lost。 SSH 一断,你跑了 4 小时的训练全部归零——因为你的 Python 进程是这个 SSH session 的子进程,session 死了进程也死了。"
这种灾难每个理工科学生都至少遇到过一次。tmux 的核心价值就是把进程从 SSH session 解耦——你可以随意断开/重连而不影响后台任务。
🗺️ 架构重组:会话与进程解耦
🚀 拆解实战 A:tmux 核心七招
第 1 招:创建命名会话
# SSH 到服务器后
tmux new -s training
# 你已进入一个名为 "training" 的 tmux 会话
# 在里面跑你想跑的命令,比如:
python train.py第 2 招:分离会话(最关键技能)
按 Ctrl+B,松开 Ctrl+B 后再按 D(detach)。 你回到 SSH 主界面。关键:训练任务还在后台运行,但你已脱离 tmux。 此时可以直接关闭 SSH / 关电脑——任务不受影响。
第 3 招:列出/恢复会话
# 第二天重新 SSH 到服务器后
tmux ls
# 输出: training: 1 windows (created Tue Aug 15 21:00:00)
tmux attach -t training
# 重新进入 training 会话,看到训练任务的输出第 4 招:分屏(多任务并行)
在 tmux 会话内:
Ctrl+B然后按"—— 分成上下两个面板Ctrl+B然后按%—— 分成左右两个面板Ctrl+B然后按方向键 —— 切换面板焦点
典型用法:一个面板跑训练,一个面板看 GPU 占用(nvidia-smi),一个面板看日志(tail -f log.txt)。
第 5 招:多窗口
Ctrl+B 然后按 C —— 新建一个 tmux 窗口 Ctrl+B 然后按 数字键 0/1/2... —— 切换到对应编号的窗口 Ctrl+B 然后按 , —— 给当前窗口改名
第 6 招:滚动查看历史
Ctrl+B 然后按 [ —— 进入复制模式,方向键可以向上翻历史输出 按 q 退出复制模式
第 7 招:杀死会话
tmux kill-session -t training
# 或者会话内输入 exit🚀 拆解实战 B:典型科研长任务工作流
# 1. SSH 到服务器
ssh 用户名@服务器地址
# 2. 创建 tmux 会话
tmux new -s exp01
# 3. 分屏: 上面板放训练
python train.py --epochs 50 --lr 0.001 > log.txt 2>&1
# 4. 按 Ctrl+B 然后 " 切到下面板
# 5. 下面板放 GPU 监控
watch -n 1 nvidia-smi
# 6. Ctrl+B + 上下方向键切回训练面板
# 7. 按 Ctrl+B + D 脱离会话
# 8. 关闭笔记本,去睡觉
# === 第二天 ===
# 9. SSH 重连
ssh 用户名@服务器地址
# 10. 恢复会话
tmux attach -t exp01
# 看到训练完成的全部输出和 GPU 占用历史🚀 拆解实战 C:WezTerm 配置(可选升级)
WezTerm 是现代终端的代表,相比 Windows Terminal / iTerm2 有几个优势:
- GPU 加速渲染:滚动巨长日志不卡顿
- Lua 配置:所有设置都是代码,可版本管理
- 跨平台一致:Windows/Mac/Linux 配置完全相同
最小配置 ~/.wezterm.lua:
local wezterm = require 'wezterm'
return {
-- 字体
font = wezterm.font('JetBrains Mono'),
font_size = 14.0,
-- 颜色主题
color_scheme = 'Tokyo Night',
-- 默认窗口大小
initial_cols = 120,
initial_rows = 40,
-- 启用 tmux 状态栏顶部展示
enable_tab_bar = true,
-- 鼠标选中即复制
selection_word_boundary = ' \t\n{[}]()\"\'`',
}📦 本课交付物(提交给 AI 初审/讲师抽检)
- [ ] tmux 会话演练截图:完成一次"创建会话 → 运行任务 → 分离 → 重连"的完整流程,截 4 张关键时刻
- [ ] 分屏多任务截图:tmux 内分屏跑 Python 训练 + nvidia-smi 监控 + tail 日志
- [ ] WezTerm 配置文件(可选):自己的
.wezterm.lua配置,含字体、主题、窗口大小至少 3 项定制 - [ ] 个人 tmux 速查卡:把本课 7 招整理为一页参考卡,加入个人工具箱
🏁 小结与自测 (Milestone Checklist)
- [ ] 我理解 tmux 解决的核心问题:进程与 SSH session 解耦,断线不丢任务
- [ ] 我掌握了 tmux 七招:创建/分离/恢复/分屏/多窗口/滚动/杀会话
- [ ] 我能用 tmux 搭建"分屏跑训练 + 监控 GPU + 看日志"的多面板工作流
- [ ] 我清楚 Windows 用户的限制:必须通过 WSL2 才能用 tmux
- [ ] 我了解 WezTerm 相对默认终端的优势,能写出基础的 Lua 配置
- [ ] 我会用
tmux ls检查是否有遗忘的会话,避免长期占用服务器资源
