tmux 简介
tmux 是一个开源工具,用于在一个终端窗口中运行多个终端会话。它从 msys2 提取,可以在 Git for Windows 的 Git Bash (MingW64) 下正常使用。
tmux(以及 screen)正是专门为了解决'SSH 掉线后还能继续原来的会话'这个问题而设计的工具。
本文介绍在 Windows 系统下通过 Git Bash 安装和使用 tmux 及 Fish Shell 的方法。内容包括 tmux 的基本概念、SSH 会话保持原理、安装步骤、常用快捷键、配置文件优化(如鼠标支持、滚轮滚动)。此外还涵盖了 Fish Shell 的集成设置以及常见问题的排查,例如嵌套会话警告和配置文件语法错误修复。旨在帮助用户在本地或远程终端中实现稳定的会话管理。
tmux 是一个开源工具,用于在一个终端窗口中运行多个终端会话。它从 msys2 提取,可以在 Git for Windows 的 Git Bash (MingW64) 下正常使用。
tmux(以及 screen)正是专门为了解决'SSH 掉线后还能继续原来的会话'这个问题而设计的工具。
| 工具 | SSH 掉线后还能连上原来的会话吗? | 说明 |
|---|---|---|
| 普通 bash / zsh | 不能 | 会话结束,进程收到 SIGHUP 信号,通常被杀死 |
| tmux | 能 | 会话独立于 SSH 连接存在,掉线后可以随时重新 attach |
| screen | 能 | 和 tmux 功能几乎一样,但 tmux 现在更流行、功能更强 |
| zellij | 能 | 更现代的替代品,但普及度不如 tmux |
SSH 掉线了也没关系(关浏览器、断网、电脑关机都行)
tmux ls
# 看到类似:mytrain: 1 windows (created Tue Feb 25 19:45:12 2026) [80x24]
tmux attach -t mytrain # 或者简写 tmux a -t mytrain
在 tmux 里面跑你的程序(比如训练脚本)
python standalone_warmup_with_wandb.py ...
登录服务器后,先启动一个 tmux 会话
tmux new -s mytrain # -s 后面是会话名字,随便起
在 tmux 里按 Ctrl+b 再按下面键:
d → detach(脱离会话,但不关闭,程序继续跑)c → 新建窗口n / p → 切换下一个/上一个窗口, → 重命名当前窗口w → 窗口列表(鼠标或键盘选)Ctrl+b ? → 查看所有快捷键帮助如果你遇到提示 sessions should be nested with care, unset $TMUX to force,是因为你已经在一个 tmux 会话里,又尝试启动新的 tmux 会话。tmux 默认不推荐嵌套会话。
解决方法:
exit 并回车,回到原生终端界面,再重新启动 tmux。$TMUX 变量后启动:
unset TMUX && tmux.exe
⚠️ 注意:嵌套会话会导致快捷键、窗格管理混乱,非必要不建议这么做。如果遇到 [server exited unexpectedly] 或 usage: send-keys ... 错误,通常是因为 .tmux.conf 配置文件里的命令写法不合法。
常见错误示例 & 修正方案:
| 错误写法(导致崩溃) | 正确写法(示例) | 说明 |
|---|---|---|
send-keys(无任何参数) | send-keys "ls -l" | 必须指定要发送的内容 |
setw -g mouse | setw -g mouse on | 布尔型选项必须指定 on/off |
修复步骤:
vim ~/.tmux.conf
send-keys 的行,确保格式为 send-keys [参数] 要发送的内容。tmux kill-server
tmux source ~/.tmux.conf
tmux.exe
首先保证已安装有 Git for Windows。
tmux_for_git-bash.zip 安装包。usr 文件夹(例如 D:\Git\usr)。默认路径通常是 C:\Program Files\Git\usr。D:\Git\usr\bin\tmux.exe。也可以在 git-bash 环境下直接克隆源码包解压:
git clone https://github.com/hongwenjun/tmux_for_windows.git
cd tmux_for_windows/
unzip -x tmux_for_git-bash.zip -d /usr
D:\Git\git-bash.exetmuxFish 是 "the friendly interactive shell" 的简称,最大特点就是方便易用。很多其他 Shell 需要配置才有的功能,Fish 默认提供。
fish_for_git-bash.7z。D:\Git。D:\Git\usr\bin\fish.exe。如果不将 fish 设为默认 shell,就能照常运行 Bash 的初始化脚本。这能够保证用户当前的环境变量不受影响并且在 fish 中也能使用。
方法一:通过 .bashrc 启动 fish
保持默认 shell 为 Bash 不变,然后添加一行 exec fish 到合适的 Bash 配置文件中,比如 .bashrc。
方法二:使用终端复用器的选项
要将 fish 设为 tmux 启动的默认 shell,在 ~/.tmux.conf 中加入这行:
set-option -g default-shell "/usr/bin/fish"
关闭问候语 默认情况下,每次启动 fish,fish 都会打印问候语。要关闭问候语,可以在 fish 中运行:
set -U fish_greeting
如果服务器上没有 tmux,先安装:
# Ubuntu/Debian
sudo apt update && sudo apt install tmux -y
# CentOS/RHEL
sudo yum install tmux -y
建议把 tmux 配置得更舒服一点(~/.tmux.conf),常见优化如下:
# 改前缀键为 Ctrl+a(很多人觉得比 Ctrl+b 好按)
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# 鼠标支持(可选)
set -g mouse on
# 窗口从 1 开始编号(更直观)
set -g base-index 1
setw -g pane-base-index 1
# 启用鼠标操作及滚轮滚动
setw -g mouse on
set-option -g history-limit 20000
bind -n WheelUpPane select-pane -t=; copy-mode -e; send-keys -M
bind -n WheelDownPane select-pane -t=; send-keys -M
tmux 就是为'SSH 掉线后还能连回原来的程序'而生的,用起来非常稳。只要你先 tmux new -s xxx 再跑训练,掉线后再 tmux a -t xxx 就能无缝接上。强烈建议你现在就试一次。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online