linux bash进程与终端
终端
- 什么事终端?
- 计算机包含输入单元,主机【cpu,内存】,输出单元
- 输入单元我们以键盘表示,输出单元一般为显示器【音频输出】
- 一般我们将输入输出单元统称为
"终端"
,也就是说终端能产生数据,也能显示数据
- 终端分为物理终端和软件终端
物理终端:传统的显示器,键盘,鼠标,只要能实现数据输入输出
[read,write]
统称为终端
软件终端【伪终端】:主要通过tcp/ip协议实现的终端,它能
模拟一个能实现”数据输入和数据输出的终端“
比如 ssh ,telnet…
虚拟终端登录后如何通信
- sshd服务会打开一个 dev/ptms 这个文件(它是一个伪终端主设备文件),bin/bash 进程会打开一个 dev/pts[0,1,2](它是一个伪终端从设备文件)
- ptmx/ptsx 它们通过伪终端设备驱动程序模拟出输入输出的功能,/bin/bash 进程就可以实现数据读取和数据输入
[read,write]
- bin/bash 进程启动后对终端数据的读取和写入就是通过pts实现的(能实现标准输入,标准输出)
dev/pts0
标准输入dev/pts1
标准输出dev/pts2
标准错误 当bin/bash 打开dev/pts0 文件时我们可以简单的认为进程已经连接了我们的输入单元,输出单元(也就是显示器和键盘),bin/bash已经可以输入输出相当于连接了一个终端(这个终端是通过tcp/ip 协议实现的) linux 内核(sshd服务)会模拟一个终端出来[0,1,2]
(标准输入,标准输出,标准错误)- 如果不理解我上面的内容建议看看这个大佬的文章彻底理解Linux的各种终端类型以及概念
总结
我们通过ssh client 连接 sshd服务(它是一个守护进程,它的协议是tcp/ip)
然后sshd服务接收客户端连接之后,clone,fork一个进程,同时打开伪终端主设备文件/dev/ptmx
然后fork一个进程,同时启动bin/bash(读取etc/passwd)进程,该进程会打开一个伪终端从设备文件dev/pts
这个伪终端能实现数据输入(可以理解为键盘 dev/pts0
)数据输出(可以理解为显示器 dev/pts1
dev/pts2
)
主从设备终端通过伪终端驱动设备程序进行通信
ssh client 输入可以当做远程服务器输入
远程服务器输出通过tcp/ip协议传输到ssh client
bin/bash 接收到数据需要通过tcp/ip(伪终端驱动设备文件来完成)