介绍

最近在研究有关 UNIX 的相关理论知识,在此记录相关重要概念备忘。

概述

伪终端是指,对于一个应用程序而言,它看似一个终端,但事实上它并不是一个真正的终 端。 通常一个进程打开伪终端主设备,调用 fork。子进程建立一个新的会话,打开一个相 应的伪终端从设备,将其文件描述符复制到标准输入输出错误,然后调用 exec。伪终端从 设备称为子进程的控制终端。 看起来像一个双向管道,从设备上的终端行规程使得我 们拥有普通管道没有的其他处理能力。

伪终端的典型用途

网络登录服务器

最典型的例子是 telnetd 和 rlogind 服务器。 在 rlogind 服务器和登录 shell 之间有 两个 exec 调用,这是因为 login 程序通常在两个 exec 之间检验用户是否合法。

窗口系统终端模拟

终端模拟器最为 shell 和窗口管理器之间的媒介。每个 shell 在自己的窗口中执行。 shell 将自己的标准输入、标准输出、标准错误连接到 PTY 的从设备端。

script 程序

script 程序将终端会话期间的所有输入和输出信息复制到一个文件中。 使用 script 的不 足是必须处理文件中的控制字符。

expect 程序

在非交互模式中驱动交互模式运行。

运行协同进程

当通过管道与协同进程通信时,标准 I/O 库会完全缓冲标准输入和标准输出,从而引起死 锁。 现在协同进程的标准输入和标准输出就像终端设备一样,所以标准 I/O 库会将这两个 流设置为行缓冲。

观看长时间运行程序的输出

由于重定向到文件时,标准 I/O 库将完全缓冲它的标准输出。

打开伪终端设备

PTY 表现得就像物理终端设备一样,因此应用程序就无需在意它们在使用的是何种设备。 在伪设备可用之前,它的权限必须设置,以便应用程序可以访问它。