tmux基本原理
目录
- **一、核心架构:客户端-服务器模型**
- **二、终端虚拟化:伪终端(PTY)**
- **三、会话持久化原理**
- **四、窗格分割的实现**
- **五、关键系统调用**
- **六、与传统终端对比**
- **七、典型工作流示例**
- **总结**
tmux
(Terminal Multiplexer)的核心原理基于
客户端-服务器模型和
终端虚拟化技术,通过解耦终端显示与运行进程实现会话持久化。以下是其核心原理的深度解析:
一、核心架构:客户端-服务器模型
-
tmux
服务器(Server)- 作为守护进程在后台运行(
tmux server
) - 管理所有会话、窗口和窗格的生命周期
- 存储终端状态(光标位置、屏幕内容、进程状态等)
- 关键特性:即使所有客户端断开,服务器仍保持会话运行
- 作为守护进程在后台运行(
-
tmux
客户端(Client)- 用户实际操作的终端界面(如 SSH 窗口)
- 职责:
- 将用户输入(按键/鼠标)转发给服务器
- 接收服务器返回的终端渲染数据并显示
- 允许多个客户端同时连接同一会话(协作场景)
-
通信协议
- 使用 Unix Domain Socket(默认
$TMPDIR/tmux-<uid>/default
) - 传输内容:
- 用户输入(键盘/鼠标事件)
- 终端渲染数据(ANSI 转义序列)
- 使用 Unix Domain Socket(默认
二、终端虚拟化:伪终端(PTY)
-
窗格的本质
每个窗格对应一个 伪终端从设备(PTY Slave):tmux
通过forkpty()
创建 PTY 对(Master/Slave)- 子进程(如 Bash)绑定到 PTY Slave,认为自己在真实终端中运行
-
数据流管理
- 输入路径:客户端 →
tmux
服务器 → PTY Master → PTY Slave → 子进程 - 输出路径:子进程 → PTY Slave → PTY Master →
tmux
服务器 → 客户端
- 输入路径:客户端 →
三、会话持久化原理
-
进程树保持
- 所有窗格进程以
tmux server
为父进程 - SSH 断开时:
tmux client
退出 → 但tmux server
和子进程持续运行
- 所有窗格进程以
-
终端状态快照
tmux
维护每个窗格的:- 屏幕内容(字符矩阵)
- 滚动缓冲区(历史输出)
- 光标位置
- 进程状态(运行/暂停/退出码)
四、窗格分割的实现
-
布局引擎
- 使用 树状结构 管理窗格:
- 实时计算每个窗格的坐标和尺寸
- 使用 树状结构 管理窗格:
-
渲染优化
- 仅重绘发生变化的窗格区域
- 合并多个窗格的 ANSI 转义序列输出为单一数据流发送给客户端
五、关键系统调用
操作 | 底层调用 | 作用说明 |
---|---|---|
创建会话 | forkpty() | 创建伪终端对 |
窗格分割 | ioctl(TIOCSWINSZ) | 动态调整子进程终端尺寸 |
事件监听 | poll() /epoll() | 监听多个文件描述符事件 |
终端控制 | tcsetattr() /tcgetattr() | 保存/恢复终端模式(如原始模式) |
状态持久化 | daemon() | 服务器守护进程化 |
六、与传统终端对比
场景 | 普通终端 | tmux |
---|---|---|
SSH 断开 | 所有子进程被终止 | 进程由 tmux server 托管 |
多任务管理 | 依赖终端标签/窗口 | 内置窗格/窗口管理系统 |
输出历史查看 | 依赖终端滚动条 | 独立滚动缓冲区(Ctrl+b [ ) |
协作共享 | 困难(需 screen -x ) | 原生支持多客户端连接 |
七、典型工作流示例
- 用户启动
tmux new-session
- 内核创建 PTY 对:
forkpty(&master_fd, NULL, NULL, &win_size); // 创建伪终端 execve("/bin/bash", ...); // 在子进程中启动shell
tmux server
监听:- 用户键盘事件(来自客户端)
- PTY Master 的输出数据
- 用户断开 SSH:
tmux client
进程终止tmux server
持续将 Bash/Vim 输出写入缓冲区
- 用户重连时:
- 新客户端从服务器获取完整终端状态快照
- 重绘所有窗格内容
总结
tmux
通过 客户端-服务器架构 和 伪终端虚拟化技术,实现了:
- 终端状态持久化 - 解耦物理终端与运行进程
- 高效终端复用 - 单连接管理多任务
- 实时协作支持 - 多客户端同步
- 资源隔离 - 每个窗格拥有独立 PTY 和缓冲区
这种设计使 tmux
成为系统管理员和开发者的核心生产力工具,尤其适合远程服务器管理和复杂工作流场景。
相关文章:
tmux基本原理
目录 **一、核心架构:客户端-服务器模型****二、终端虚拟化:伪终端(PTY)****三、会话持久化原理****四、窗格分割的实现****五、关键系统调用****六、与传统终端对比****七、典型工作流示例****总结** tmux(Terminal M…...
RAGFlow从理论到实战的检索增强生成指南
目录 前言 一、RAGFlow是什么?为何需要它? 二、RAGFlow技术架构拆解 三、实战指南:从0到1搭建RAGFlow系统 步骤1:环境准备 步骤2:数据接入 步骤3:检索与生成 四、优化技巧:让RAGFlow更精…...
【Java】ForkJoin 框架
在Java中,ForkJoin框架是并行编程的一个重要工具,它主要用于处理可以分解为多个子任务的复杂任务。ForkJoin框架的核心是ForkJoinPool,它是一个线程池,专门用于执行ForkJoinTask任务。通过将大任务分解为多个小任务,并…...
PHP实战:安全实现文件上传功能教程
HTML部分: <form action"upload.php" method"post" enctype"multipart/form-data"> <input type"file" name"userfile"> <input type"submit" value"上传"> <…...

桥 接 模 式
在玩游戏的时候我们常常会遇到这样的机制:我们可以随意选择不同的角色,搭配不同的武器。这时只有一个抽象上下文的策略模式就不那么适用了,因为一旦我们使用继承的方式,武器和角色总有一方会变得难以扩展。这时,我们就…...

基于 Flink+Paimon+Hologres 搭建淘天集团湖仓一体数据链路
摘要:本文整理自淘天集团高级数据开发工程师朱奥老师在 Flink Forward Asia 2024 流式湖仓论坛的分享。内容主要为以下五部分: 1、项目背景 2、核心策略 3、解决方案 4、项目价值 5、未来计划 01、项目背景 1.1 当前实时数仓架构 当前的淘天实时架构是从…...

多杆合一驱动城市空间治理智慧化
引言:城市“杆林困境”与智慧化破局 走在现代城市的街道上,路灯、监控、交通信号灯、5G基站等杆体林立,不仅侵占公共空间,更暴露了城市治理的碎片化问题。如何让这些“沉默的钢铁”升级为城市的“智慧神经元”?答案在…...

用QT写一个车速表
主要包含以下绘制步骤: 1、绘制画布: /** 绘制画布 */ void Widget::initCanvas(QPainter &painter) {//消除锯齿painter.setRenderHint(QPainter::Antialiasing,true);//设置底色painter.setBrush(QColor(0,0,0));painter.drawRect(rect());//平移…...
(19)java在区块链中的应用
🔗 Java在区块链中的应用:智能合约开发全攻略 TL;DR: Java在区块链领域主要通过Hyperledger Fabric、Web3j和专用JVM实现智能合约开发,相比Solidity具有更强的企业级支持和开发效率,但在执行效率和Gas消耗方面存在差异,…...

数控技术应用理实一体化平台VR实训系统
::产品概述:: 目前我国本科类院校学生普遍存在的问题就是缺少对实际工作的了解,一直在学习相关专业的理论知识,对社会的相关企业的用人情况不了解。这也就直接导致了毕业的学生和社会上的用人单位需求有点脱节,这也是由于我国的现行本科教育侧…...

C# 将HTML文档、HTML字符串转换为图片
在.NET开发中,将HTML内容转换为图片的需求广泛存在于报告生成、邮件内容存档、网页快照等场景。Free Spire.Doc for .NET作为一款免费的专业文档处理库,无需Microsoft Word依赖,即可轻松实现这一功能。本文将深入解析HTML文档和字符串转图片两…...

界面控件DevExpress WinForms v24.2新版亮点:富文本编辑器功能全新升级
DevExpress WinForms拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜…...

华为云Flexus+DeepSeek征文|华为云 Flexus X 加速 Dify 平台落地:高性能、低成本、强可靠性的云上选择
目录 前言 1 一键部署 Dify 平台的完整步骤 1.1 选择模板 1.2 参数配置 1.3 资源栈设置 1.4 配置确认与部署 2 Flexus X 服务器的技术优势 2.1 柔性算力随心配 2.2 一直加速一直快 2.3 越用越省降本多 2.4 安全可靠更放心 3 Flexus X 在 Dify 解决方案中的性能体验…...

Jenkins 2.479.1安装和邮箱配置教程
1.安装 在JDK安装并设置环境变量完成后,下载官网对应的war版本,在对应目录下打开命令行窗口并输入 java -jar jenkins.war其余参数感兴趣可以自行查阅,这里启动的 jenkins 服务默认占用8080端口,在浏览器输入 localhost:8080进入…...
MySQL 大战 PostgreSQL
一、底层架构对比 维度MySQLPostgreSQL存储引擎多引擎支持(InnoDB、MyISAM等)单一存储引擎(支持扩展如Zheap、Zedstore)事务实现基于UNDO日志的MVCC基于堆表(Heap)的MVCC锁机制…...

DFS入门刷题c++
目录 821. 跳台阶 - AcWing题库 92. 递归实现指数型枚举 - AcWing题库 P1706 全排列问题 - 洛谷 (luogu.com.cn) P1157 组合的输出 - 洛谷 (luogu.com.cn) P1036 [NOIP 2002 普及组] 选数 - 洛谷 (luogu.com.cn) P2089 烤鸡 - 洛谷 (luogu.com.cn) P1088 [NOIP 2…...

ToolsSet之:十六进制及二进制编辑运算工具
ToolsSet是微软商店中的一款包含数十种实用工具数百种细分功能的工具集合应用,应用基本功能介绍可以查看以下文章: Windows应用ToolsSet介绍https://blog.csdn.net/BinField/article/details/145898264 ToolsSet中Number菜单下的Hex Operate工具可以进…...
服务器液冷:突破散热瓶颈,驱动算力革命的“冷静”引擎
在人工智能大模型训练、高性能计算和超密集数据中心爆发的时代,CPU/GPU芯片的功耗已突破千瓦大关,传统风冷散热捉襟见肘。液冷技术正从实验室走向数据中心核心,成为解锁更高算力密度的关键钥匙。本文将深度解析液冷技术的原理、方案与应用。 …...
1.2 HarmonyOS NEXT分布式架构核心技术解析
HarmonyOS NEXT分布式架构核心技术解析 在数字化浪潮中,HarmonyOS NEXT以其卓越的分布式架构,重塑了设备间协同交互的格局,为开发者开拓出全新的应用设计思路。本章节将深入剖析HarmonyOS NEXT分布式架构的三大核心技术,助力开发…...

【Python训练营打卡】day40 @浙大疏锦行
DAY 40 训练和测试的规范写法 知识点回顾: 1. 彩色和灰度图片测试和训练的规范写法:封装在函数中 2. 展平操作:除第一个维度batchsize外全部展平 3. dropout操作:训练阶段随机丢弃神经元,测试阶段eval模式关闭dropo…...

MCP Server的五种主流架构:从原理到实践的深度解析
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 在AI大模型与外部数据交互的浪潮中,MCP Server(Model Context Protocol Server)已成为连接模型与现实世界的桥梁。本文…...

跨协议协同智造新实践:DeviceNet-EtherCAT网关驱动汽车焊接装配效能跃迁
在汽车制造领域,机器人协作对于提升生产效率与产品质量至关重要。焊接、装配等关键环节,需要机器人与各类设备紧密配合。JH-DVN-ECT疆鸿智能的devicenet从站转ethercat主站协议网关,成为实现这一高效协作的得力助手,尤其是在连接欧…...
在Linux上安装Docker并配置镜像加速器:从入门到实战
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 Docker作为容器化技术的标杆工具,已经成为现代软件开发和运维的必备技能。对于程序员和技术爱好者来说,在Linux系统上搭建D…...

让 Deepseek 写一个尺码计算器
下面是一个简单的尺码计算器微信小程序的代码实现,包含页面布局、逻辑处理和样式。 1. 项目结构 size-calculator/ ├── pages/ │ ├── index/ │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── inde…...

代码随想录算法训练营第60期第五十三天打卡
大家好,我们今天来到了最后一章图论,其实图论比较难,涉及的算法也比较多,今天比较重要的就是深度优先搜索与广度优先搜索,后面的迪杰斯特拉算法等算法在我们求最短路都会涉及到,还有最近公共祖先࿰…...

Nacos实战——动态 IP 黑名单过滤
1、需求分析 一些恶意用户(可能是黑客、爬虫、DDoS 攻击者)可能频繁请求服务器资源,导致资源占用过高。针对这种问题,可以通过IP 封禁,可以有效拉黑攻击者,防止资源被滥用,保障合法…...

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.14 R语言解题
本文是实验设计与分析(第6版,Montgomery著,傅珏生译) 第5章析因设计引导5.7节思考题5.14 R语言解题。主要涉及方差分析,正态假设检验,残差分析,交互作用图。 dataframe<-data.frame( strengthc(9.60,9.…...

在Ubuntu20.04上安装ROS Noetic
本章教程,主要记录在Ubuntu20.04上安装ROS Noetic。 一、添加软件源 sudo sh -c . /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list二、设置秘钥 …...

python里面导入yfinance的时候报错
我的代码: import yfinance as yf import os proxy http://127.0.0.1:7890 # 代理设置,此处修改 os.environ[HTTP_PROXY] proxy os.environ[HTTPS_PROXY] proxydata yf.download("AAPL",start"2010-1-1",end"2021-8-1&quo…...

winform LiveCharts2的使用--图表的使用
介绍 对于图标,需要使用到livechart2中的CartesianChart 控件,是一个“即用型”控件,用于使用笛卡尔坐标系创建绘图。需要将Series属性分配一组ICartesianSeries。 例如下面代码,创建一个最简单的图表: cartesianCha…...