什么是伪终端 (pty/tty)?

har*_*ari 121 linux terminal pty

这可能是非常基本的问题,但我想彻底了解它。

  1. 什么是伪终端?(tty/pty)
  2. 我们为什么需要它们?他们是如何被介绍的以及对它的需求是什么?
  3. 它们过时了吗?我们不再需要它们了吗?有什么东西可以代替它们吗?
  4. 任何有用的用例?

我做了什么:

  1. 阅读手册页 - 获得了一些信息,但没有确切的图片。
  2. 试图从 Richard Stevens 的 Unix Network Programming 中阅读它们。得到了一些信息,但不是那why?部分。

thi*_*ton 57

  1. 一种具有物理终端功能但实际上不是一个终端的设备。由 xterm 等终端模拟器创建。更多细节在联机帮助页 pty(7) 中。
  2. 传统上,UNIX 具有一组进程的控制终端的概念,并且许多 I/O 功能在构建时都考虑到了终端。例如,伪终端处理一些控制字符,如 ^C。
  3. 它们并没有过时,并在许多程序中使用,包括 ssh。
  4. SSH。

  • ssh 为其创建的 shell 分配一个 pty。shell 连接到从端,因此可以依赖普通终端的所有功能(例如 termcap,如果我没记错的话),并且 ssh 守护进程连接到主端并在那里发送和接收其输入。 (4认同)
  • 谢谢@thiton。你能详细说明一下你的`ssh`例子吗?它如何使用 pty/tty?`ssh` 中的主/从角色如何发挥作用? (2认同)

小智 30

答案就在名字上——“Pseudo”的意思是“非真品,但具有外观”。

对于第一个终端,总是有一个硬件与相关设备相连,无论是显示硬件还是串行端口。

有了 xwindows、telnet 和 ssh,就需要“伪设备”软件来代替显示硬件。它们是“伪终端”......模拟终端硬件的软件,以与物理设备相同的方式处理输入和输出,以便连接的软件不知道没有连接真正的设备。


Jos*_*hua 13

伪终端是串行线路的仿真器。它们为 telnet、ssh 和 xterm shell 提供端点。

  • @Diego Sevilla 最初的 unix 发明者在 Plan 9 中取消了 tty/ptys ,并且那里的终端几乎只使用输入/输出数据流。但是在 *nix 中,ttys 仍然存在并被控制台和终端模拟器使用,例如控制终端大小、流量控制、行缓冲、特殊键事件和其他东西。 (4认同)
  • @nos:事实证明,它们并不是我们相信的古代遗物。试图在 Windows 中没有它们最终是相当痛苦的。使用 powershell 远程处理受到一件事的阻碍:交互式控制台程序不起作用并且无法修复以正常工作。没有像 DOS EDIT 或 vi 这样合理的文本编辑器的可能性。 (4认同)
  • 而且它们是古老的遗物(实际上,shell/文本应用程序仍在通过模拟 [tele-type](http://en.wikipedia.org/wiki/Teleprinter#Teletype) 编写器的设备进行交互,例如他们在 40 年前工作......)我们仍然需要他们,因为没有替代品:-( (2认同)
  • @Joshua 另一个相反的证据是 Unix 的原始设计者创建了 Plan 9 OS,在那里他们完全取消了 tty,但他们以这种方式(以及更多)实现了远程处理就好了。 (2认同)