终端与终端模拟器

终端与终端模拟器

我试图在这里澄清我对终端的理解。

终端实际上​​是一个设备(键盘+显示器)。在 CLI 模式下,键盘输入直接进入 shell,并显示在监视器上。

同时,使用GUI模式时,必须打开终端仿真器程序才能与shell交互。键盘的输入进入终端仿真器程序,并显示在监视器上的终端仿真器窗口上。输入不会直接进入 shell。终端仿真器程序会将键盘的输入转发到 shell。终端仿真器程序使用伪终端与 shell 进行通信。

当您从启动直接进入 CLI 时,不涉及终端仿真器程序。

如果我的理解有什么不对的地方请评论并指正。

更新: 我回读了TTY 揭秘。我想我应该问的是文本终端(直接启动到文本模式)和GUI终端之间的区别,因为我认为终端=文本终端,终端模拟器=GUI终端,例如Gnome终端,这是错误的。从本次更新之前的回答来看,用户实际上也像在 GUI 模式下一样使用终端仿真器程序(用户空间)。我可以知道它是 TTY 程序吗,因为我在运行命令“ps aux”时发现了 TTY 进程。我从来不知道在文本模式下也涉及终端仿真器程序(不是指内核空间中的终端仿真器)。

更新2: 我读Linux控制台。据此,文本模式是控制台,而GUI模式的终端软件是终端仿真器。嗯,很有道理,和我之前的理解是一样的。然而,根据图解来自 TTY 揭秘,终端模拟器位于内核空间而不是用户空间。有趣的是,该图指的是文本模式。

答案1

这里有几个单独的术语需要独立定义:

终端:真正的键盘/显示器接口,如 VT100:https://en.wikipedia.org/wiki/VT100

终端模拟器(TTY):模拟终端,提供输入和输出。在大多数 Linux 发行版中按 ctrl+alt+F2,您就会进入其中。在终端中输入“w”,您将看到 w 命令由“tty”运行。

伪终端(PTY):主/从对 (ptmx),其中其他一些软件(如 ssh 或 GUI 终端)通过从属 (pts) 提供类似终端的界面。http://linux.die.net/man/4/ptmx 在 GUI 终端中输入“w”,您将看到列出的来自 pts 的 w 命令。

:在登录时运行的命令行解释器,并解释您的输入。 bash/zsh 就是这样的例子。

但是,请记住,这些术语在对话中都可以互换。当有人提到“终端”、“终端模拟器”、“控制台”、“命令行”或“shell”时,除非上下文另有说明,否则他们可能更笼统地指的是:

“我用它来控制一些计算机的基于文本的东西。”

编辑问题更新

请参阅下面的所有与 pts 或 pty 匹配的进程:

root@localhost tests]# ps fauxww | grep -P [pt]t[ys] 
root      2604  2.3  0.8  50728 34576 tty1     Ss+  07:09   1:15      \_ /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var/run/gdm/auth-for-gdm-VRHaoJ/database -nolisten tcp vt1
root      2569  0.0  0.0   2008   500 tty2     Ss+  07:09   0:00 /sbin/mingetty /dev/tty2
root      2571  0.0  0.0   2008   500 tty3     Ss+  07:09   0:00 /sbin/mingetty /dev/tty3
root      2573  0.0  0.0   2008   504 tty4     Ss+  07:09   0:00 /sbin/mingetty /dev/tty4
root      2575  0.0  0.0   2008   500 tty5     Ss+  07:09   0:00 /sbin/mingetty /dev/tty5
root      2577  0.0  0.0   2008   504 tty6     Ss+  07:09   0:00 /sbin/mingetty /dev/tty6
sin       3374  0.2  0.7  90668 28564 ?        Sl   07:13   0:09 /usr/bin/python /usr/bin/terminator   <<< Added this parent of 3377 manually to see the pts source
sin       3377  0.0  0.0   2076   620 ?        S    07:13   0:00  \_ gnome-pty-helper
sin       3378  0.0  0.0   5236  1712 pts/0    Ss   07:13   0:00  \_ /bin/bash
root      4054  0.0  0.0   5124  1676 pts/0    S    07:23   0:00  |       \_ bash
root      5034  0.0  0.0   5056  1092 pts/0    R+   08:03   0:00  |           \_ ps fauxww
root      5035  0.0  0.0   4416   740 pts/0    S+   08:03   0:00  |           \_ grep -P [pt]t[ys]
sin       4154  0.0  0.0   5236  1708 pts/1    Ss   07:23   0:00  \_ /bin/bash
sin       4485  0.0  0.0   7252  3500 pts/1    S+   07:41   0:00      \_ python

您将看到 pts 和 tty 相关进程。您假设因为您在 ps 中看到 tty,所以这就是您的 GUI 终端正在使用的东西,但事实并非如此。在这种情况下,mingetty TTY 进程是我可以通过 ctrl+shift+F2-6 使用的所有进程,而 pty 是与我的 GUI 终端进程相关的从属进程。为了确定这一点,请检查 GUI 终端进程的 lsof:

[root@localhost tests]# ps fauxww | grep terminator
sin       3374  0.2  0.7  90668 28564 ?        Sl   07:13   0:08 /usr/bin/python /usr/bin/terminator
[root@localhost tests]# lsof -p 3374 | grep '[pt]t[ys]'
/usr/bin/ 3374  sin   17u   CHR      136,0      0t0      3 /dev/pts/0
/usr/bin/ 3374  sin   25u   CHR      136,1      0t0      4 /dev/pts/1

当您启动进入文本模式时,您将进入 TTY,就像在桌面上按 ctrl+alt+f2 一样。当您使用 SSH/GUI 终端时,您使用的是伪终端。

答案2

(显示)终端是具有键盘和显示器并与主机通信的硬件。终端本身就是一台小型计算机;嵌入式系统。

终端仿真器是在通用机器上运行的软件,它实现某些终端的行为。

终端模拟器并不都是图形化的。它们可以基于文本显示模式。 Linux 内核中的控制台就是一个例子。

终端仿真器也可以使用终端仿真本身。 GNU Screen 程序就是一个例子。它需要一个终端,但为在其下运行的程序提供终端仿真。

终端仿真器可以在主机中运行,以便提供虚拟终端来访问该主机本身。在主机上运行的软件将同一台主机视为附加的远程终端。但终端模拟器也可以用来简单地使用计算机作为访问某些远程主机的终端。例如,使用 PC 上 Windows 下运行的 IBM 3270 模拟器来访问大型机。它是一个模拟器,因为您使用的是 Windows 下的一个软件,而不是桌面上实际的 3270。但您并没有使用它来访问 Windows 命令行。这种终端仿真器的另一个例子是串行通信包,如 Minicom、超级终端等。此外,还有流行的 PuTTY SSH 客户端。

相关内容