tmux会话持久化依赖后台server进程存活,若tmux ls无输出,说明server已退出,常见原因包括磁盘满导致socket创建失败、系统重启或oom killer终止进程、用户session被登出;此时会话状态彻底丢失。

会话能持久化,但默认配置会让它“假死”——tmux ls 看不到、tmux attach 连不上,不是数据丢了,是 server 没起来或 socket 被堵了。
为什么 tmux ls 什么也不显示,但进程明明在跑?
这不是会话被删了,而是 tmux server 进程已退出。常见原因有三个:
-
/tmp或/var/run磁盘满(df -h必查),导致 tmux 无法创建 socket 文件(默认路径:/tmp/tmux-$(id -u)/) - 系统重启或 OOM killer 干掉了
tmux: server进程(用ps aux | grep 'tmux: server'确认) - 用户被登出(如 systemd user session 终止),连带 kill 掉所有子进程,包括 tmux server
只要 server 没了,所有会话状态就彻底丢失——tmux 不保存快照,它只靠内存+socket 活着。
如何让新窗口自动继承当前路径,而不是总跳回 ~?
默认行为是新建窗口时工作目录重置为 shell 启动目录,对运维极不友好。解决方式只有一行配置:
bind c new-window -c '#{pane_current_path}'
加进 ~/.tmux.conf,再执行 tmux source-file ~/.tmux.conf 生效。注意不是 -c $PWD,因为 $PWD 是 client 启动时的路径,而 #{pane_current_path} 是当前窗格实时路径,动态准确。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
分屏后想同步输入命令,但 setw synchronize-panes 不生效?
同步输入必须满足两个条件,缺一不可:
- 先确保已开启鼠标支持(
set -g mouse on),否则部分终端下 pane 切换异常,影响同步上下文 - 命令必须带参数:正确写法是
Ctrl-b : setw synchronize-panes on(或off关闭),漏掉on默认是 toggle,容易误判为“没反应”
同步只作用于当前窗口下的所有窗格,不影响其他窗口;退出同步后,各窗格光标位置和历史独立保留。
Ctrl-a d 分离后,为什么 tmux attach -t xxx 报错 “no sessions”?
不是命令写错了,是会话名拼写或大小写不一致。tmux 会话名严格区分大小写,且不接受空格或特殊字符(如 prod-db 合法,prod db 或 prod_db 可能因 shell 展开失败而创建失败)。
安全做法是:
- 创建时用纯字母数字命名:
tmux new -s myapp - 列出时直接复制名字:
tmux ls输出类似myapp: 1 windows (created ...),把myapp复进 attach 命令 - 避免用
tmux attach不带-t,它会连最近一次会话,生产环境极易连错
真正难排查的点在于:分离成功 ≠ server 持续存活。网络波动、磁盘满、SSH 强制 kill 都可能让 server 在你不知情时退出——所以每次 attach 前,先 tmux ls 确认,比反复试更省时间。










