杀死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
相关产品推荐
相关产品推荐

