linux ptys是什么

linux ptys是指Linux伪终端,而伪终端则是指伪终端master和伪终端slave这一对字符设备;其中的slave对应“/dev/pts/”目录下的一个文件,而master则在内存中标识为一个文件描述符;伪终端由终端模拟器提供,终端模拟器是一个运行在用户态的应用程序。

linux ptys是什么

本教程操作环境:linux5.9.8系统、Dell G3电脑。

linux ptys是什么?

Linux 伪终端(pty)

我们常说的终端分为终端 tty1-6 和伪终端。使用 tty1-6 的情况一般为 Linux 系统直接连了键盘和显示器,或者是使用了 vSphere console 等虚拟化方案,其它情况下使用的都是伪终端。本文将介绍伪终端的基本概念。本文中演示部分使用的环境为 ubuntu 18.04。

伪终端

伪终端(pseudo terminal,有时也被称为 pty)是指伪终端 master 和伪终端 slave 这一对字符设备。其中的 slave 对应 /dev/pts/ 目录下的一个文件,而 master 则在内存中标识为一个文件描述符(fd)。伪终端由终端模拟器提供,终端模拟器是一个运行在用户态的应用程序。

Master 端是更接近用户显示器、键盘的一端,slave 端是在虚拟终端上运行的 CLI(Command Line Interface,命令行接口)程序。Linux 的伪终端驱动程序,会把 master 端(如键盘)写入的数据转发给 slave 端供程序输入,把程序写入 slave 端的数据转发给 master 端供(显示器驱动等)读取。请参考下面的示意图(此图来自互联网):

linux ptys是什么

我们打开的终端桌面程序,比如 GNOME Terminal,其实是一种终端模拟软件。当终端模拟软件运行时,它通过打开 /dev/ptmx 文件创建了一个伪终端的 master 和 slave 对,并让 shell 运行在 slave 端。当用户在终端模拟软件中按下键盘按键时,它产生字节流并写入 master 中,shell 进程便可从 slave 中读取输入;shell 和它的子程序,将输出内容写入 slave 中,由终端模拟软件负责将字符打印到窗口中。

伪终端的使用场景

伪终端大概有三类使用场景:

像 xterm、gnome-terminal 等图形界面的终端模拟软件将键盘和鼠标事件转换为文本输入,并图形化地显示输出内容远程 shell 应用程序(如 sshd)在客户机上的远程终端和服务器上的伪终端之间中继输入和输出多路复用器应用,如 screen 和 tmux。它们把输入和输出从一个终端转播到另一个终端,使文本模式的应用程序从实际的终端上脱离

Linux 中为什么要提出伪终端这个概念呢?shell 等命令行程序不可以直接从显示器和键盘读取数据吗?
为了同屏运行多个终端模拟器、并实现远程登录,还真不能让 shell 直接跨过伪终端这一层。在操作系统的一大思想——虚拟化的指导下,为多个终端模拟器、远程用户分配多个虚拟的终端是有必要的。上图中的 shell 使用的 slave 端就是一个虚拟化的终端。Master 端是模拟用户一端的交互。之所以称为虚拟化的终端,是因为它除了转发数据流外,还要有点终端的样子。

伪终端原理

伪终端本质上是运行在用户态的终端模拟器创建的一对字符设备。其中的 slave 对应 /dev/pts/ 目录下的一个文件,而 master 则在内存中标识为一个文件描述符(fd)。对于伪终端来说,重点是软件仿真终端程序运行在用户空间,这是它与终端的本质区别,请参考下面的示意图:

b6ad2cd500855a0bfb5049d025f236a.png

/dev/ptmx 是一个字符设备文件,当进程打开 /dev/ptmx 文件时,进程会同时获得一个指向 pseudoterminal master(ptm)的文件描述符和一个在 /dev/pts 目录中创建的 pseudoterminal slave(pts) 设备。通过打开 /dev/ptmx 文件获得的每个文件描述符都是一个独立的 ptm,它有自己关联的 pts,ptmx(可以认为内存中有一个 ptmx 对象)在内部会维护该文件描述符和 pts 的对应关系,对这个文件描述符的读写都会被 ptmx 转发到对应的 pts。我们可以通过 lsof 命令查看 ptmx 打开的文件描述符:

$ sudo lsof /dev/ptmx

linux ptys是什么

进程默认的 IO

一般情况下我们通过远程连接的方式执行命令时,进程的标准输入、标准输出和标准错误输出都会绑定到伪终端上,下面是一个简单的 demo 程序:

#include #include int main(){    printf("PID : %dn", getpid());    sleep(200);    printf("n");    return 0;}

把这段代码保存在文件 mydemo.c 中,然后执行下面的命令编译并执行该程序:

$ gcc -Wall mydemo.c -o demo$ ./demo

linux ptys是什么

demo 程序输出了自己进程的 PID,现在另外开一个终端执行 lsof 命令:

$ lsof -p 17981

linux ptys是什么

可以看到进程的 0u(标准输入)、1u(标准输出)、2u(标准错误输出)都绑定到了伪终端 /dev/pts/0 上。

推荐学习:《linux视频教程》

以上就是linux ptys是什么的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/130260.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
centos怎么安装搜狗输入法
上一篇 2025年11月28日 10:50:35
如何解决centos7下rc.local开机不执行
下一篇 2025年11月28日 10:50:48

相关推荐

  • 如何使用DiskItemType列举磁盘信息项的类型

    如何使用DiskItemType列举磁盘信息项的类型如何使用DiskItemType列举磁盘信息项的类型如何使用DiskItemType列举磁盘信息项的类型如何使用DiskItemType列举磁盘信息项的类型

    本篇文章给大家带来的内容是关于如何使用diskitemtype列举磁盘信息项的类型,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 DiskItemType 节点名 Disk 子节点 以上就是如何使用DiskItemType列举磁盘信息项的类型的详细内容,更多请关注创想鸟其它相关文章…

    2026年9月1日 用户投稿
    000
  • heatmap.js热力图绘制:如何解决边界数据点导致的`getImageData`错误?

    heatmap.js热力图绘制:巧妙解决边界数据点引发的getImageData错误 使用heatmap.js库绘制热力图时,经常会遇到边界数据点导致错误的问题。本文将分析一个典型案例,并提供有效的解决方案。该案例中,当数据点坐标加上半径等于或超过画布尺寸时,会抛出failed to execute…

    2026年9月1日
    000
  • 消息称微软自研 AI 芯片遇阻,拟修改线路图 2027 年推出 Maia 280 应对英伟达竞争

    感谢网友 华南吴彦祖 的线索投递! 7 月 3 日消息,据外媒 The Information 报道,微软在自研 AI 芯片设计上遇到一系列问题,同时担心相应业务遭到其他竞争对手超越,因此预计将更新线路图,在 2027 年推出一款“相对折衷”的 AI 芯片,以应对外界压力。 ▲ 微软目前的 Maia…

    2026年9月1日
    100
  • 快手极速版和快手有什么区别_快手极速版与快手对比

    快手和快手极速版不是同一平台,前者功能全适合创作与直播带货,后者更轻便专注刷视频赚金币,广告多但支持拉新变现。 如果您在选择使用快手还是快手极速版时感到困惑,可能是因为两者在功能、收益模式和用户体验上存在显著差异。了解这些区别有助于您根据自身需求做出合适的选择。 本文运行环境:华为Mate 60 P…

    2026年8月31日
    100
  • deepseek同类型ai工具排行榜 ai工具前十名盘点2025

    对于寻求类似于 DeepSeek 的 AI 工具的人来说,本文提供了深入的排名。本文重点介绍了 10 个最强大的替代方案,包括其功能、优点、缺点和定价信息。通过对这些工具的全面分析,读者可以做出明智的决定,选择最能满足其特定需求的 AI 解决方案。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索…

    2026年8月31日
    000
  • 如何使用ImageType定义镜像信息的类型

    本篇文章给大家带来的内容是关于如何使用imagetype定义镜像信息的类型,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 ImageType 节点名 Image 子节点 以上就是如何使用ImageType定义镜像信息的类型的详细内容,更多请关注创想鸟其它相关文章!

    2026年8月31日
    000
  • 荷兰定位技术公司 TomTom 宣布裁员 300 人,将聚焦 AI 转型

    6 月 30 日消息,据路透社报道,荷兰定位技术公司 tomtom 周一宣布,将裁员 300 人以调整组织架构,并在以产品为核心的发展战略中更广泛地采用人工智能。 TomTom 表示,此次裁员将集中在应用层开发部门,以及销售和客户支持团队。 查询公开资料获悉,TomTom 创立于 1991 年,拥有…

    2026年8月31日
    300
  • 谷歌加速器游戏版费用说明_免费使用条件与功能介绍

    付费加速器提供更优线路与稳定连接,免费版多有限制且存安全风险,建议根据需求选择正规渠道产品并关注用户评价与隐私政策。 加速器游戏版,一般来说,分为免费和付费两种模式。免费版通常会有一些限制,比如线路选择较少、加速效果一般、广告较多等等。而付费版则能提供更优质的加速体验,更好的线路、更稳定的连接,以及…

    2026年8月31日
    500
  • 使用minio搭建私有化对象存储服务

    使用minio搭建私有化对象存储服务使用minio搭建私有化对象存储服务使用minio搭建私有化对象存储服务使用minio搭建私有化对象存储服务

    在工作中,我们常常会接触到对象存储服务,但这些服务大多是云服务。对于需要对外开放的项目而言,这类服务是可行的。然而,当我们需要私有化部署时,如何继续使用对象存储呢? 这里介绍一个开源项目MinIO,使用它,我们可以轻松搭建属于自己的私有云服务。 MinIO是一个非常轻量级的服务,可以简单地与其他应用…

    2026年8月31日 用户投稿
    000
  • 怎么使用InstanceMonitorDataType实例的监控数据集合

    本篇文章给大家带来的内容是关于怎么使用instancemonitordatatype实例的监控数据集合,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 InstanceMonitorDataType 节点名 InstanceMonitorData 子节点 以上就是怎么使用Instan…

    2026年8月31日
    400
  • Element Plus弹框内Three.js渲染出现空白区域,如何解决?

    Element Plus弹框中集成Three.js渲染3D场景时,底部出现空白区域,这并非Three.js渲染问题,而是CSS样式冲突导致。文章标题为“Element Plus和Three.js构建3D预览窗口,出现底部空白区域”,核心问题是Three.js渲染容器(#container)未能完全填…

    2026年8月31日
    000
  • Element Plus与Three.js结合使用时,3D预览窗口出现空白区域该如何解决?

    Element Plus和Three.js结合使用:3D预览窗口空白区域问题排查与解决 在使用Element Plus和Three.js构建3D预览窗口时,可能会遇到意想不到的空白区域问题(如下图所示)。本文将分析此问题,并提供解决方案。 问题描述: 使用Element Plus的el-dialog…

    2026年8月31日
    000
  • 如何解决Laravel中复杂的BelongsToThrough关系问题?使用Composer可以!

    可以通过以下地址学习 composer:学习地址 在 Laravel 开发中,我们常常需要处理复杂的模型关系。最近,我在处理一个项目时遇到了一个棘手的问题:需要在多层级的模型之间建立 BelongsToThrough 关系。传统的 HasManyThrough 关系无法满足我的需求,因为它只支持一层…

    用户投稿 2026年8月31日
    000
  • 检测到ping有明显丢包时如何作链路测试

    检测到ping有明显丢包时如何作链路测试检测到ping有明显丢包时如何作链路测试检测到ping有明显丢包时如何作链路测试检测到ping有明显丢包时如何作链路测试

    本篇文章给大家带来的内容是关于检测到ping有明显丢包时如何作链路测试,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 Windows实例网络访问丢包延时高 当网站访问很慢或无法访问时,若排除其它显著问题,而检测到 ping 有明显丢包时,建议您作链路测试。Windows 环境下,您…

    2026年8月31日 用户投稿
    100
  • 如何在Java中配置CLASSPATH环境变量

    CLASSPATH是Java中用于指定类和资源文件路径的环境变量或参数,JVM和编译器依赖它查找.class文件及jar包。其路径列表在Windows用分号、Linux/macOS用冒号分隔,可包含目录、jar或zip文件。未正确设置会导致“找不到类”或NoClassDefFoundError错误。…

    2026年8月31日
    000
  • kk在线播放免费高清视频播放器入口 kk高清播放器网页版地址

    在寻找流畅便捷的高清在线视频服务时,了解不同平台的特点与风险至关重要。本文旨在帮助您辨别和选择优质、安全的在线播放平台,确保获得稳定可靠的观看体验,并有效规避潜在的网络安全问题。 一、了解在线高清播放平台 1、当用户寻找类似“kk高清播放器”的网页版入口时,其核心诉求是能够方便快捷地在线观看高清画质…

    2026年8月31日
    000
  • HBase列式存储究竟是如何工作的?它与传统行式数据库有何区别?

    HBase:深入理解其高效的列式存储 hbase,作为一款基于hadoop的分布式nosql数据库,其独特的列式存储机制使其在处理海量数据时展现出显著优势,与传统的行式数据库(如mysql)有着本质区别。本文将阐述hbase列式存储的原理,并揭示其高效性的关键所在。 HBase的核心概念是“列族”(…

    2026年8月31日
    100
  • 如何解决Laravel模型中虚拟列的问题?使用stancl/virtualcolumn可以!

    可以通过以下地址学习 composer:学习地址 在 Laravel 项目中,虚拟列(Virtual Column)是一种强大的功能,可以让我们在不实际创建数据库列的情况下,在模型中定义和使用额外的属性。然而,直接在模型中手动实现虚拟列可能会导致代码复杂度增加,并且难以管理和维护。 我最近在项目中遇…

    用户投稿 2026年8月31日
    100
  • Linux 环境下如何通过 mtr 命令行工具进行链路测试

    本文在介绍linux 环境下如何通过 mtr 命令行工具进行链路测试的基础上,重点探讨了其具体步骤,本文内容紧凑,希望大家可以有所收获。 Linux实例网站访问丢包延时高 当网站访问很慢或无法访问时,若排除其它显著问题,而检测到 ping 有明显丢包时,建议您作链路测试。Linux 环境下,您可以通…

    2026年8月31日
    100
  • IOS,安卓,Windows和塞班,你最喜欢哪个?为什么?

    IOS,安卓,Windows和塞班,你最喜欢哪个?为什么?IOS,安卓,Windows和塞班,你最喜欢哪个?为什么?IOS,安卓,Windows和塞班,你最喜欢哪个?为什么?IOS,安卓,Windows和塞班,你最喜欢哪个?为什么?

    从事软件开发多年,我主要使用c++/c++和java进行开发,涉及ios、android、windows和塞班四个系统的开发。除了ios系统外,其余三个系统我都有深入的开发经验。其中,我在android系统上花费的时间最长,研究过其中间层的framework框架,并从事过两年的应用级开发。从技术角度…

    2026年8月31日 用户投稿
    000

发表回复

登录后才能评论
关注微信