本文记录《UNIX环境高级编程》第3版 第19章 Pseudo Terminals
的一些知识点。
Overview
![Typical arrangement of processes using a pseudo terminal]()
图19.1展示了使用伪终端时所涉及的进程的典型排列。
建立伪终端的典型流程如下:
- 打开一个 PTY master
- 找到它对应的 slave 设备名
- 设置 slave 的权限
- 解锁 slave
- fork
- 子进程建立新会话、把 slave 变成控制终端
- 子进程把 stdin/stdout/stderr 重定向到 slave
- 子进程 exec(shell)
- 父进程继续持有 master,和子进程交互
示意图如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| 父进程(终端模拟器/sshd/你写的程序) | | posix_openpt(O_RDWR) v +------------------------------+ | PTY master | <---- 父进程持有 master fd +------------------------------+ || || 内核关联的一对伪终端 || +------------------------------+ | PTY slave | <---- 设备文件 /dev/pts/N +------------------------------+ | | fork() +--------+--------+ | | | | 父进程继续用 master 子进程: 与 shell 交互 setsid() 打开 slave ioctl(TIOCSCTTY) / 作为控制终端 dup2(slave, 0/1/2) exec("/bin/bash")
|
Network Login Servers
![Arrangement of processes for rlogind server]()
Windowing System Terminal
Emulation
![Arrangement of processes for windowing system]()
✒️
✒️
✒️