You need to enable JavaScript to run this app. 杀死tmux进程后服务意外退出 如何单次执行脚本重启tmux会话
优惠活动
大模型
产品
解决方案
定价
更多

杀死tmux进程后服务意外退出 如何单次执行脚本重启tmux会话

问题根因
  • pkill -f tmux 发送终止信号后,tmux 服务端需要少量时间完成资源释放、进程退出的收尾流程,此时立即执行新建会话命令会和仍处于销毁阶段的服务端通信失败,抛出 server exited unexpectedly 报错
  • 直接杀死所有 tmux 进程属于不必要的粗暴操作,还可能误关闭其他无关的 tmux 会话
解决方案

方案1:保留杀全量tmux进程的逻辑,新增等待退出逻辑

如果你确实需要销毁所有现有tmux进程再新建会话,只需在杀进程后等待tmux完全退出再执行新建操作即可:

#!/bin/sh
pkill -f tmux
# 循环等待tmux进程完全退出,轮询间隔0.1秒避免长时间等待
while pgrep -f tmux > /dev/null; do sleep 0.1; done
tmux new-session -s "Tab 1"\; \
  split-window -v \; \
  split-window -h \;  \
  split-window -v \;

方案2(更推荐):仅处理目标同名会话,不影响其他tmux进程

你的核心需求是避免固定会话名重复创建报错,不需要杀死所有tmux进程,只需判断目标会话是否存在、存在则先删除对应会话即可,不会影响其他正在运行的tmux会话:

#!/bin/sh
# 判断目标会话是否存在,2>/dev/null是为了屏蔽不存在时的报错信息
if tmux has-session -t "Tab 1" 2>/dev/null; then
  tmux kill-session -t "Tab 1"
fi
tmux new-session -s "Tab 1"\; \
  split-window -v \; \
  split-window -h \;  \
  split-window -v \;

如果需要保留原有同名会话、脚本运行时直接切入已有会话,还可以调整为如下逻辑:

#!/bin/sh
if tmux has-session -t "Tab 1" 2>/dev/null; then
  tmux attach-session -t "Tab 1"
  exit 0
fi
tmux new-session -s "Tab 1"\; \
  split-window -v \; \
  split-window -h \;  \
  split-window -v \;

内容的提问来源于stack exchange,提问作者Omar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 07:36:04