linux 伪终端原理,探索Linux之 终端模拟器和伪终端交互原理

写在前面:本人水平有限,不少地方都是本身的理解,若有误导,欢迎指正linux

# 终端模拟器指的是在linux桌面环境下运行的仿真终端(以下图)shell

a76f4b8033edc91616191950868de034.png

# 终端模拟器为啥叫模拟器呢? 由于真正的终端是全屏显示的黑乎乎的不带窗口的那种,这里带了窗口,是基于linux的X窗口系统上模拟出来的终端设备,在终端上一样能够运行shell,和真的终端功能基本无差异bash

# 伪终端是啥?伪终端是linux内核模拟出来的假的终端设备对(经过系统调用能够动态建立这种假的终端设备),所谓假的是指这种设备不和真正的硬件设备相关联,只是操做接口和数据解析协议是按照终端设备规范来的服务器

# 经过系统调用建立的伪终端设备对分为主从两个设备,主设备名为/dev/ptmx ,从设备名为/dev/pts0、/dev/pts1.../dev/ptsN等,内核容许动态建立无限制个设备对(因此能够同时打开许许多多个shell窗口)优化

# 从主设备之间的读写就像管道,外部进程(模拟器进程)写主设备的时候,数据能够从从设备中读取出来(shell从stdin读取命令);进程输出的数据会写入从设备(shell写stdout、stderr),从设备的数据又会写入到主设备,模拟器进程能够经过读主设备来获得进程的输出(读取进程的stdout,stderr)3d

# 一般一个进程默认打开的stdin stdout stderr文件就是对应打开的伪终端从设备(pts)blog

#  在桌面应用程序中打开终端模拟器后,作了以下一些操做:接口

1 模拟器主进程启动,在内核中动态建立伪终端设备对,好比 主设备/dev/ptmx 从设备 /dev/pts1进程

2 模拟器主进程和X服务器创建链接,建立模拟器窗口,接收和处理从X服务器发过来的鼠标和键盘事件,把键盘事件写给主设备ptmx,同时负责读取ptmx主设备的输出,将输出内容渲染到模拟器窗口上(一样须要和X服务器交互)事件

3 模拟器主进程fork出子进程,将子进程的stdin、stdout、stderr文件描述符定位到从设备/dev/pts1,子进程经过exec系统调用装入shell程序(如bash),此时bash正式登场,从终端(从设备)读取命令执行,bash彻底感受不到本身是运行在伪终端上的~

# 上面的过程咱们能够发现一个问题:每打开一个终端模拟器就要启动两个进程,这是很浪费资源的,实际上经过我分析Ubuntu上的gnome-terminal模拟器发现它作了以下优化处理:把模拟器主进程作成一个本地服务器,服务器监听和处理多个主设备,同时负责和X服务器打交道来完成窗口的显示~ 这样每次打开新终端的时候,只会fork出一个新shell进程~

如下为证:

73922e59e26ebe07e9b93849cfa080e4.png

3e3e77290f1c75d87366ff38052c1e65.png

7556831dfab23c6575888c9934b31a29.png

后续还有更多篇对linux终端相关的文章~这篇先到此~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值