TTY
- TTY(TeleTYpewriter),电传打字机,作为输入输出的终端设备连接到计算机进行交互,后泛指计算机的文本命令行终端

- TTY 驱动
- line discipline 是一个逻辑组件
- 可通过
stty查看设置 TTY 的特征和 line discipline 规则 - line discipline 主要有以下功能:
- 缓存字符,回车发送给与 TTY 相关的前台用户进程
- 拦截处理一些特殊的功能键,发送进程信号,如当用户按
CTRL+c时,它向连接到 PTY slave 的进程发送kill -2(SIGINT)信号
- 可通过
- 会话管理
- 同时运行多个程序
- line discipline 是一个逻辑组件
- 随着硬件终端逐渐演化成了软件的概念,出现了软件仿真终端,称为终端模拟器(terminal emulator),其直接运行在内核态。就像过去的物理终端一样,它监听来自键盘的事件将其发送到 TTY 驱动,并从 TTY 驱动读取响应,通过显卡驱动将结果渲染到显示器上

- 在 Linux 和类 Unix 系统中,TTY 都由一个特殊的设备文件
/dev/tty[n]所抽象化表示。与这个虚拟终端的交互,是通过对这个设备文件的读写操作,以及使用 ioctl 系统调用操作这个设备文件进行的- 通过执行 tty 命令可以查看代表当前虚拟终端的设备文件:
$ tty /dev/ttys005 - 查看与 tty 交互的后台进程,与 tty 持久交互的则是前台进程
$ lsof /dev/ttys005 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME zsh 68684 lianyuansheng 0u CHR 16,5 0t214736 1185 /dev/ttys005 zsh 68684 lianyuansheng 1u CHR 16,5 0t214736 1185 /dev/ttys005 zsh 68684 lianyuansheng 2u CHR 16,5 0t214736 1185 /dev/ttys005 zsh 68684 lianyuansheng 10u CHR 16,5 0t6811 1185 /dev/ttys005 lsof 79386 lianyuansheng 0u CHR 16,5 0t214736 1185 /dev/ttys005 lsof 79386 lianyuansheng 1u CHR 16,5 0t214736 1185 /dev/ttys005 lsof 79386 lianyuansheng 2u CHR 16,5 0t214736 1185 /dev/ttys005 - 与 Shell 区别
- Shell 由 terminal 程序 fork 出来,是 terminal 的子进程
- Shell 负责解释执行用户输入的字符命令,而 TTY 则是处理键盘事件,负责字符的显示
- 通过执行 tty 命令可以查看代表当前虚拟终端的设备文件:
- 伪终端 PTY(pseudo TTY):运行用户态的仿终端软件,比如 xterm,gnome-terminal,以及远程终端 ssh
- 伪终端如何与 TTY 驱动交互(以 gnome-terminal 为例)

- 先分配一个伪终端
- PTY 是通过打开特殊的设备文件 /dev/ptmx 创建,由一对双向的字符设备构成,称为 PTY master 和 PTY slave
- 让 gnome-terminal 持有 PTY master 的文件描述符
/dev/ptmx - fork 一个 shell 子进程,并让 shell 持有 PTY slave 的设备文件
/dev/pts/[n],即让其标准输入、标准输出和标准错误都设置为 PTY slave - PTY master 和 PTY slave 之间通过 TTY 驱动会话交流
- 输入的命令由 shell 子进程执行
- 先分配一个伪终端
- 伪终端如何与 TTY 驱动交互(以 gnome-terminal 为例)
远程终端
TODO: 实现一个远程终端玩具
学习参考
其他文章
交流区
加载中...