APUE笔记:Pseudo Terminals(十九)

本文记录《UNIX环境高级编程》第3版 第19章 Pseudo Terminals 的一些知识点。


Overview

Typical arrangement of processes using a pseudo terminal

图19.1展示了使用伪终端时所涉及的进程的典型排列。

建立伪终端的典型流程如下:

  1. 打开一个 PTY master
  2. 找到它对应的 slave 设备名
  3. 设置 slave 的权限
  4. 解锁 slave
  5. fork
  6. 子进程建立新会话、把 slave 变成控制终端
  7. 子进程把 stdin/stdout/stderr 重定向到 slave
  8. 子进程 exec(shell)
  9. 父进程继续持有 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

✒️

✒️

✒️