linux中的tty和terminal

概念:

Terminal终端

输入命令和显示系统响应结果的设备,比如vt100, xterm。终端模拟器支持光标移动、字符显示、复制粘贴等功能。

终端模拟器

模拟终端设备的软件,常见的有 putty, Gnome Terminal, Konsole, iTerm2

SHELL

是内核的一个壳子,把内核包起来供外部调用,也就是内核提供的功能可以通过shell调用,常见的shell有 bash, zsh, dash

tty(telettype)

电传打字机,是和内核通信的方式。终端把设备的输入传递给tty,tty 再送给shell,shell给内核执行,结果通过tty返回显示到屏幕上。

pty(pseudo telettype)

虚拟电传打字机。由pts和ptm组成。

pts(pty slave)

pty的实现。

ptm(pty master)

pty中的虚拟人,把消息传给pts。

在Linux中的实现:

查看当前pty:

❯ tty
/dev/pts/3

查看哪些进程打开了这个文件:

❯ lsof /dev/pts/3
COMMAND      PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
konsole     1112 user   25u   CHR  136,3      0t0    6 /dev/pts/3
zsh         1232 user    0u   CHR  136,3      0t0    6 /dev/pts/3
zsh         1232 user    1u   CHR  136,3      0t0    6 /dev/pts/3
zsh         1232 user    2u   CHR  136,3      0t0    6 /dev/pts/3
zsh         1232 user   10u   CHR  136,3      0t0    6 /dev/pts/3
zsh         1264 user   14u   CHR  136,3      0t0    6 /dev/pts/3
zsh         1264 user   15u   CHR  136,3      0t0    6 /dev/pts/3
zsh         1264 user   16u   CHR  136,3      0t0    6 /dev/pts/3
zsh         1527 user   14u   CHR  136,3      0t0    6 /dev/pts/3
zsh         1527 user   15u   CHR  136,3      0t0    6 /dev/pts/3
zsh         1527 user   16u   CHR  136,3      0t0    6 /dev/pts/3
zsh         1529 user   14u   CHR  136,3      0t0    6 /dev/pts/3
zsh         1529 user   15u   CHR  136,3      0t0    6 /dev/pts/3
zsh         1529 user   16u   CHR  136,3      0t0    6 /dev/pts/3
gitstatus   1530 user   14u   CHR  136,3      0t0    6 /dev/pts/3
gitstatus   1530 user   15u   CHR  136,3      0t0    6 /dev/pts/3
gitstatus   1530 user   16u   CHR  136,3      0t0    6 /dev/pts/3
lsof      155259 user    0u   CHR  136,3      0t0    6 /dev/pts/3
lsof      155259 user    1u   CHR  136,3      0t0    6 /dev/pts/3
lsof      155259 user    2u   CHR  136,3      0t0    6 /dev/pts/3

zsh的输入(0u)输出(1u)和错误(2u)都绑定到tty了,tty的数据数据可以发送到 zsh。
除了zsh之外还有gitstatus和lsof也绑定到tty。

tty会与一个前端进程组(foreground group)绑定,tty中的命令不一定会送到shell中:

❯ echo "ls -l " >/dev/pts/3  # 并没有执行命令而是直接被tty输出
ls -l 

参考

posted @ 2022-06-21 16:58  oaksharks  阅读(384)  评论(0编辑  收藏  举报