Skip to content

第 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(跨平台现代终端,可选但推荐)

应急通道

  • 不想装 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 解耦——你可以随意断开/重连而不影响后台任务。

🗺️ 架构重组:会话与进程解耦

❌ 裸 SSH(脆弱链)本地终端SSH 会话(断线即死)Python 训练任务(被杀)✅ tmux 加持(解耦链)本地终端(随意来去)SSH (可随时断开)tmux 守护进程(在服务器上常驻)Python 训练任务(独立运行,不受 SSH 影响)

🚀 拆解实战 A:tmux 核心七招

第 1 招:创建命名会话

bash
# SSH 到服务器后
tmux new -s training
# 你已进入一个名为 "training" 的 tmux 会话
# 在里面跑你想跑的命令,比如:
python train.py

第 2 招:分离会话(最关键技能

Ctrl+B松开 Ctrl+B 后再按 D(detach)。 你回到 SSH 主界面。关键:训练任务还在后台运行,但你已脱离 tmux。 此时可以直接关闭 SSH / 关电脑——任务不受影响。

第 3 招:列出/恢复会话

bash
# 第二天重新 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 招:杀死会话

bash
tmux kill-session -t training
# 或者会话内输入 exit

🚀 拆解实战 B:典型科研长任务工作流

bash
# 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 有几个优势:

  1. GPU 加速渲染:滚动巨长日志不卡顿
  2. Lua 配置:所有设置都是代码,可版本管理
  3. 跨平台一致:Windows/Mac/Linux 配置完全相同

最小配置 ~/.wezterm.lua

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 检查是否有遗忘的会话,避免长期占用服务器资源

助力学者在 AI 时代极速产出高质量学术成果 · 55 课时双轨制 · plan v3.3