定义
本文档提供此空间中特定字词和短语的定义,并在整个文档集中用作参考。
命令行应用程序(有时称为“控制台应用程序”和/或称为控制台子系统的“客户端”)是主要在文本或字符信息流上运行的程序。 它们通常不包含自己的用户界面元素,并将输出/显示和输入/交互角色委托给托管应用程序。 命令行应用程序在其标准输入 STDIN
句柄上接收一个文本流,该流表示用户的键盘输入,处理该信息,然后响应其标准输出 STDOUT
上的文本流,以便显示回用户的监视器。 当然,随着时间推移,对于其他输入设备和远程方案,这一点已经演变,但相同的基本理念保持不变:命令行客户端对文本进行操作,其他人管理显示/输入。
标准句柄是启动时作为进程空间的一部分引入的系列 STDIN
、STDOUT
、STDERR
。 它们表示在传入途中接受信息的位置,并在出路途中发送回(包括报告错误)的特殊位置。 对于命令行应用程序,这些应用程序在应用程序启动时必须始终存在。 它们要么自动继承自父级,要么由父级显式设置,要么由操作系统自动创建(如果未指定/允许)。 对于经典 Windows 应用程序,启动时这些应用程序可能为空。 但是,它们可以隐式或显式继承自父级,或在运行时由应用程序本身分配、附加和释放。
标准句柄并不表示特定类型的附加设备。 但是,对于命令行应用程序,设备通常是控制台设备、文件(从 shell 中重定向)或管道(从 shell 将一个实用工具的输出连接到下一个实用工具的输入)。 它也可能是套接字或任何其他类型的设备。
在非 Windows 平台上,TTY 和 PTY 设备分别表示与 Windows 控制台会话相同的真实物理设备或软件创建的伪设备:命令行客户端应用程序与服务器主机交互应用程序或物理键盘/显示设备之间的通信可以交换基于文本的信息的通道。
在此空间中,我们将“客户端”称为处理信息和运行命令的应用程序。 “服务器”应用程序是负责用户界面的应用程序,是代表客户端将输入和输出转换为标准表单的辅助角色。
这是一个全部捕获术语,表示影响控制台和命令行操作的所有模块。 它专门引用一个标志,该标志是可移植可执行文件标头的一部分,该标志指定启动应用程序是命令行/控制台应用程序(并且必须具有标准句柄才能启动)还是 Windows 应用程序(并且不需要它们)。
控制台主机、命令行客户端应用程序、控制台驱动程序、控制台 API 图面、伪控制台基础结构、终端、配置属性表、进程加载程序内的机制和存根,以及与这些形式应用程序的工作相关的任何实用程序都被视为属于此组。
Windows 控制台主机(或 conhost.exe
)既是所有 Windows 控制台 API 的服务器应用程序,也是用于处理命令行应用程序的经典 Windows 用户界面。 此二进制文件(API 服务器和 UI)的完整内容以前属于 Windows csrss.exe
(一个关键的系统进程),出于安全和隔离目的而不同。 今后,conhost.exe
将继续负责 API 调用服务和转换,但用户界面组件旨在通过伪控制台委托给终端。
这是来自其他平台的伪终止或“PTY”的 Windows 模拟。 它尝试匹配 PTY 的一般接口理念,提供基于文本的通信的简单双向通道,但它在 Windows 上补充了一个大型兼容性层,以将在此设计理念从经典控制台 API 界面更改为简单文本通道通信形式之前编写的 Windows 应用程序的广度。 终端可以使用伪控制台从控制台主机 conhost.exe
获取用户界面元素的所有权,同时负责 API 服务、转换和兼容性工作。
终端是命令行应用程序的用户界面和交互模块。 如今,它是过去具有显示监视器、键盘和双向串行信道的物理设备的软件表示形式。 它负责以各种形式收集用户输入,对其进行转换和编码,将任何特殊命令信息转换为单个文本流,并将其提交到 PTY 以传输到命令行客户端应用程序的 STDIN
通道。 它还负责通过 PTY 接收来自客户端应用程序 STDOUT
通道的信息,解码有效负载中的任何特殊信息,设置所有文本和其他命令的布局,以及以图形方式向最终用户呈现这些信息。