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 

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章