我一直在多个站点上阅读到 pts 设备文件用于“不直接连接到硬件”(ssh、telnet)的伪终端。
既然在你的机器上运行的 xterm 直接连接键盘上的输出和屏幕上的显示,为什么它使用伪终端设备文件呢?
我读了关于 ttys pts 的其他问题,...它似乎没有涵盖这一点..
另外,如果“伪终端”最终是一个具有输入和输出的设备文件,那么它的来源为何重要?
提前致谢
答案1
关于在内核内部管理的终端,有一些事情,例如键盘信号(例如映射Ctrl+Z
到停止信号),管理前台后台进程组,极其简陋的行版机制,发送叹息当终端消失时,并且其他细节。
对于硬件终端,终端设备位于应用程序和硬件之间。终端设备的类型取决于硬件的类型,例如(在 Linux 上)/dev/tty1
PC 键盘和屏幕、/dev/ttyS0
通过串行线路连接的终端、/dev/ttyUSB0
通过 USB 连接的终端等。
+-------------+ +-----------------+ +-------------+
| text mode | | kernel | | peripheral |
| application |<------->| e.g. /dev/ttyS0 |<------->| e.g. on a |
| | | | | serial port |
+-------------+ +-----------------+ +-------------+
与一个终端仿真器,原理是一样的,连接仍然经过内核驱动,但另一端也是一个进程。
+-------------+ +-----------------+ +-------------------+
| text mode | | kernel | | terminal emulator |
| application |<------->| /dev/pts/* |<------->| e.g. xterm, sshd, |
| | | | | screen, ... |
+-------------+ +-----------------+ +-------------------+
Xterm、telnetd1、sshd 等不(直接)连接到任何硬件。当您在键盘上键入按键时,信息会通过键盘(物理设备)到达内核内的键盘驱动程序,然后将其中继到正在侦听键盘设备的进程。如果您处于图形会话中,则该过程是X服务器然后将信息转发给窗口被聚焦的进程。相反,当 xterm 内运行的程序产生输出时,xterm 会将其转换为 X 服务器在特定位置以特定字体显示特定字符的命令。处理输入或产生输出的进程附近不涉及任何硬件,并且可能根本不涉及硬件(例如,如果 xterm 窗口在屏幕上不可见,或者如果终端由 telnet 或 telnet 提供,则至少本地不存在) ssh 服务器)。
1终端位于远程(服务器)端。
答案2
这是我找到的一个可以回答问题的链接。它基本上说它们是为了将终端仿真移动到用户空间而创建的。它位于页面顶部。