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


92

这可能是真正的基本问题,但我想彻底理解。

  1. 什么是伪终端?(tty / pty)
  2. 我们为什么需要它们?他们是如何引入的,有什么需要?
  3. 他们过时了吗?我们不再需要它们了吗?有什么替代它们的吗?
  4. 有有用的用例吗?

我做了什么:

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

我也这样认为,尤其是如果这里没有出现像openpty / forkpty这样的专业问题。

尝试将其标记为要迁移,但是Linux / Unix不是有效的迁移目标。尝试梯度下降,“超级用户”已经比该站点好一点,也许他们可以将其路由到一个更好的站点。

7
这是一个相当不错的概述:linusakesson.net/programming/tty/index.php

@nos:哇!那是一个很棒的链接。我一直在寻找的东西。感谢一吨:)
哈里

Linux编程接口的第62章和第64章可能会有所帮助
zjk

Answers:


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

1
谢谢@thiton。您能否详细说明一下您的示例ssh?如何使用pty / tty?主/从角色如何发挥作用ssh
哈里

3
ssh为它创建的外壳分配一个pty。外壳连接到从属端,从而可以依靠普通终端的所有功能(例如,如果我没记错的话,请使用termcap),而ssh守护程序连接到主端并在那里发送和接收其输入。

27

答案是名字-“ Pseudo”的意思是“不是真品,但有外观”。

在第一个终端上,总是有一块硬件与关联的设备相连,无论是显示硬件还是串行端口。

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


因为现在我们有许多应用程序需要访问同一硬件,所以每个应用程序都通过“伪”终端使用硬件吗?
哈里

我扩大了答案-希望可以澄清。

不,我们只是实际上不再拥有这种硬件。xterm模仿了经典终端,仅此而已。

@thiton:您说的emulates是软件部分,不是吗?
哈里

1
因此,今天在UNIX上下文中使用“终端”一词实际上是错误的吗?因为一切都是“伪终端”?
A. Sallai

11

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


2
而且他们古迹(真的,贝壳/文本应用程序仍在进行交互在一个模拟的设备远程型通过串行线像他们的工作在40年前......作家)我们仍然需要它们,因为没有更换: -(
nos

好吧,如果您考虑使用航站楼,我认为您所需要的只是一堆串来来去去的信件而已...
Diego Sevilla

4
@Diego Sevilla最初的unix发明者取消了Plan 9中的tty / ptys,那里的终端几乎只使用输入/输出数据流。但是在* nix中,ttys仍然存在,并且被控制台和终端仿真器用来控制终端大小,流控制,行缓冲,特殊键事件和其他内容。

4
@nos:事实证明它们不是我们引以为傲的古老文物。最后,在Windows中尝试不使用它们会很痛苦。一件事妨碍了Powershell远程处理的使用:交互式控制台程序无法正常工作,也无法固定为正常工作。没有像DOS EDIT或vi这样的合理文本编辑器的可能性。
约书亚

2
@Joshua另一个相反的证据是Unix的原始设计者创建了Plan 9 OS,他们完全取消了ttys,但是他们以这种方式(甚至更多)实现了远程操作。
2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.