PTY
现代 linux 中为了向后兼容保留了 TTY,但其进化为了内核子系统。为了让用户空间的模拟终端与用户空间的 shell 可以交互,引入了 PTY(pseudo terminal)。
模拟终端通过打开 /dev/ptmx
特殊文件以创建一对 PTY
:[1][2]
- master 端(模拟终端持有):
/dev/ptmx
的文件描述符 - slave 端(shell 持有):设备文件
/dev/pts/x
的文件描述符
标准输入输出
事实上,应用程序的标准输入输出就是 /dev/pts/x
设备文件的软链接:
~
❯ ls -al /dev/ | grep std
lrwxrwxrwx - root 21 Apr 16:25 stderr -> /proc/self/fd/2
lrwxrwxrwx - root 21 Apr 16:25 stdin -> /proc/self/fd/0
lrwxrwxrwx - root 21 Apr 16:25 stdout -> /proc/self/fd/1
~
❯ ls -al /proc/self/fd/{0,1,2}
lrwx------ - oliverdding 30 Apr 19:00 /proc/self/fd/0 -> /dev/pts/9
lrwx------ - oliverdding 30 Apr 19:00 /proc/self/fd/1 -> /dev/pts/9
lrwx------ - oliverdding 30 Apr 19:00 /proc/self/fd/2 -> /dev/pts/9