一起聊聊Linux TTY/PTS及其作用区别

下面由linux系统教程栏目给大家介绍linux tty/pts及其作用区别,希望对需要的朋友有所帮助!

Linux TTY/PTS概述

linux系统教程

+----------+     Physical Line     +----------+ | teletype |<--------------------->| teletype | +----------+                       +----------+
                                                                      +----------+  +----------+   +-------+     Physical Line     +-------+   +------+   |          | | Terminal |<->| Modem |<--------------------->| Modem |<->| UART |<->| Computer | +----------+   +-------+                       +-------+   +------+   |          |                                                                       +----------+
    +-----------------------------------------------+     |                    Kernel                     |     |                                 +--------+    |     |   +--------+   +------------+   |        |    |       +----------------+     |   |  UART  |   |    Line    |   |  TTY   |<---------->| User process A | <------>|        |<->|            |<->|        |    |       +----------------+     |   | driver |   | discipline |   | driver |<---------->| User process B |     |   +--------+   +------------+   |        |    |       +----------------+     |                                 +--------+    |     |                                               |     +-----------------------------------------------+
                      +----------------+                       |   TTY Driver   |                       |                |                       |   +-------+    |       +----------------+  +------------+       |   |       |<---------->| User process A |  | Terminal A |<--------->| ttyS0 |    |       +----------------+  +------------+       |   |       |<---------->| User process B |                       |   +-------+    |       +----------------+                       |                |                       |   +-------+    |       +----------------+  +------------+       |   |       |<---------->| User process C |  | Terminal B |<--------->| ttyS1 |    |       +----------------+  +------------+       |   |       |<---------->| User process D |                       |   +-------+    |       +----------------+                       |                |                       +----------------+
#先用tty命令看看当前bash关联到了哪个tty dev@debian:~$ tty /dev/pts/1  #看tty都被哪些进程打开了 dev@debian:~$ lsof /dev/pts/1 COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME bash     907  dev    0u   CHR  136,1      0t0    4 /dev/pts/1 bash     907  dev    1u   CHR  136,1      0t0    4 /dev/pts/1 bash     907  dev    2u   CHR  136,1      0t0    4 /dev/pts/1 bash     907  dev  255u   CHR  136,1      0t0    4 /dev/pts/1 lsof    1118  dev    0u   CHR  136,1      0t0    4 /dev/pts/1 lsof    1118  dev    1u   CHR  136,1      0t0    4 /dev/pts/1 lsof    1118  dev    2u   CHR  136,1      0t0    4 /dev/pts/1  #往tty里面直接写数据跟写标准输出是一样的效果 dev@dev:~$ echo aaa > /dev/pts/2 aaa
   Input    +--------------------------+    R/W     +------+ ----------->|                          |<---------->| bash |             |          pts/1           |            +------+ <-----------|                          |<---------->| lsof |    Output   | Foreground process group |    R/W     +------+             +--------------------------+
                   +-----------------------------------------+                    |          Kernel                         |                    |                           +--------+    |       +----------------+   +----------+      |   +-------------------+   |  tty1  |<---------->| User processes |  | Keyboard |--------->|                   |   +--------+    |       +----------------+  +----------+      |   | Terminal Emulator |<->|  tty2  |<---------->| User processes |  | Monitor  |<---------|                   |   +--------+    |       +----------------+  +----------+      |   +-------------------+   |  tty3  |<---------->| User processes |                    |                           +--------+    |       +----------------+                    |                                         |                    +-----------------------------------------+
 +----------+       +------------+  | Keyboard |------>|            |  +----------+       |  Terminal  |  | Monitor  |<------|            |  +----------+       +------------+                           |                           |  ssh protocol                           |                           ↓                     +------------+                     |            |                     | ssh server |--------------------------+                     |            |           fork           |                     +------------+                          |                         |   ↑                               |                         |   |                               |                   write |   | read                          |                         |   |                               |                   +-----|---|-------------------+           |                   |     |   |                   |           ↓                   |     ↓   |      +-------+    |       +-------+                   |   +--------+   | pts/0 |<---------->| shell |                   |   |        |   +-------+    |       +-------+                   |   |  ptmx  |<->| pts/1 |<---------->| shell |                   |   |        |   +-------+    |       +-------+                   |   +--------+   | pts/2 |<---------->| shell |                   |                +-------+    |       +-------+                   |    Kernel                   |                   +-----------------------------+
#pty(pseudo terminal device)由两部分构成,ptmx是master端,pts是slave端, #进程可以通过调用API请求ptmx创建一个pts,然后将会得到连接到ptmx的读写fd和一个新创建的pts, #ptmx在内部会维护该fd和pts的对应关系,随后往这个fd的读写会被ptmx转发到对应的pts。  #这里可以看到sshd已经打开了/dev/ptmx dev@debian:~$ sudo lsof /dev/ptmx COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME sshd    1191  dev    8u   CHR    5,2      0t0 6531 /dev/ptmx sshd    1191  dev   10u   CHR    5,2      0t0 6531 /dev/ptmx sshd    1191  dev   11u   CHR    5,2      0t0 6531 /dev/ptmx
 +----------+       +------------+  | Keyboard |------>|            |  +----------+       |  Terminal  |--------------------------+  | Monitor  |<------|            |           fork           |  +----------+       +------------+                          |                         |   ↑                               |                         |   |                               |                   write |   | read                          |                         |   |                               |                   +-----|---|-------------------+           |                   |     |   |                   |           ↓                   |     ↓   |      +-------+    |       +-------+                   |   +--------+   | pts/0 |<---------->| shell |                   |   |        |   +-------+    |       +-------+                   |   |  ptmx  |<->| pts/1 |<---------->| shell |                   |   |        |   +-------+    |       +-------+                   |   +--------+   | pts/2 |<---------->| shell |                   |                +-------+    |       +-------+                   |    Kernel                   |                   +-----------------------------+
 +----------+       +------------+  | Keyboard |------>|            |  +----------+       |  Terminal  |  | Monitor  |<------|            |  +----------+       +------------+                           |                           |  ssh protocol                           |                           ↓                     +------------+                     |            |                     | ssh server |--------------------------+                     |            |           fork           |                     +------------+                          |                         |   ↑                               |                         |   |                               |                   write |   | read                          |                         |   |                               |                   +-----|---|-------------------+           |                   |     ↓   |                   |           ↓                   |   +--------+   +-------+    |       +-------+  fork   +-------------+                   |   |  ptmx  |<->| pts/0 |<---------->| shell |-------->| tmux client |                   |   +--------+   +-------+    |       +-------+         +-------------+                   |   |        |                |                               ↑                   |   +--------+   +-------+    |       +-------+               |                   |   |  ptmx  |<->| pts/2 |<---------->| shell |               |                   |   +--------+   +-------+    |       +-------+               |                   |     ↑   |  Kernel           |           ↑                   |                   +-----|---|-------------------+           |                   |                         |   |                               |                   |                         |w/r|   +---------------------------+                   |                         |   |   |            fork                               |                         |   ↓   |                                               |                     +-------------+                                             |                     |             |                                             |                     | tmux server |<--------------------------------------------+                     |             |                     +-------------+
dev@dev:~$ stty -a speed 38400 baud; rows 51; columns 204; line = 0; intr = ^C; quit = ^; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0; -parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany imaxbel -iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享