我注意到在一些开源项目中经常提到pty和tty,谁能告诉我它们是什么意思,它们之间有什么区别?


Tty原意为“电传打字机”,pty原意为“伪电传打字机”。

在UNIX中,/dev/tty*是充当“电传打字机”的任何设备,即:终端。(之所以叫电传打字机,是因为在那个愚昧的时代,我们的终端就是这样的。)

pty是一个伪tty,它是一个设备条目,对在那里读写的进程来说就像一个终端,但由其他东西管理。它们首先出现(我记得)在X窗口和屏幕之类的地方,你需要一个像终端一样的东西,但可以从另一个程序使用。

tty:电传打字机。通常是指计算机的串行端口,上面连接着终端。

企业:pseudoteletype。内核提供了伪串口,连接到模拟终端的程序,如xterm或screen。

tty是一个终端(它代表电传打字机——最初的终端使用一行打印机输出,键盘输入!)。终端基本上就是一个使用文本进行输入和输出的用户界面设备。

pty是一个伪终端——它是一个软件实现,在附加的程序看来就像一个终端,但它不是直接与“真正的”终端通信,而是将输入和输出传输给另一个程序。

例如,当您通过ssh登录到一台计算机并运行ls时,ls命令将其输出发送到伪终端,伪终端的另一端连接到ssh守护进程。

如果运行不带命令行参数的mount命令,将显示 挂载到系统上的文件系统,您会注意到一行看起来像什么 是这样的: 无。on /dev/pts type devpts (rw,gid=5,mode=620) 这表明一个特殊类型的文件系统devpts被挂载在/dev/pts上 文件系统不与任何硬件设备相关联,它是一个“神奇”文件系统 它是由Linux内核创建的。它类似于/proc文件系统

与/dev目录类似,/dev/pts包含与设备对应的条目。但 与/dev是一个普通目录不同,/dev/pts是一个特殊的目录,即cre- 由Linux内核动态创建。目录内容随时间而变化 并反映运行系统的状态。 /dev/pts中的条目对应于伪终端(或伪tty,或pty)。

Linux为您打开的每个新终端窗口创建一个PTY,并显示相应的PTY PTY设备就像终端设备一样——它接受 从键盘输入并显示运行在其中的程序的文本输出。 PTY编号,PTY编号为表项的名称 /dev/pts。

为 例如,如果新的终端窗口的PTY号是7,从调用此命令 另一个窗口:

echo ‘I am a virtual di ’ > /dev/pts/7

输出显示在新的终端窗口中。 您可以尝试将7更改为1,2,这取决于打开的终端,您将在另一个终端窗口中看到输出。开发/pts是公共汽车(邮局)做这件事!

tty是计算机上的物理终端电传端口(通常是串行端口)。

电传tty也可以由在内核空间中作为模块运行的计算机程序来模拟。

teletype这个词是20世纪30年代电报打字机或电传打字机的简称,电传打字机本身就是19世纪30年代和19世纪40年代电报编码机的替代品。

TTY -电传打字机1930年代

pty是计算机操作系统内核提供的用于连接用户地面终端仿真软件(ssh、xterm、screen等)的伪电传输入端口。

伪电传打字机

终端就是使用文本进行输入和输出的计算机用户界面。


操作系统的实现

它们使用伪电传端口,然而,它们的命名和实现有一些分歧。

Linux在/dev上挂载一个特殊的文件系统devpts ('s'大概代表serial),它为您打开的每个新终端窗口(例如/dev/pts/0)在/dev/pts中创建一个相应的条目


macOS/FreeBSD也使用/dev文件结构,但是,他们为你打开的每个新终端窗口使用一个编号的TTY命名约定,例如/dev/ttys002


微软Windows在命令Shell中仍然为行式打印机终端提供LPT端口的概念,用于向打印机输出。