写在前面:本人水平有限,很多地方都是自己的理解,如有误导,欢迎指正

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

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

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

# 通过系统调用创建的伪终端设备对分为主从两个设备,主设备名为/dev/ptmx ,从设备名为/dev/pts0、/dev/pts1.../dev/ptsN等,内核允许动态创建无限制个设备对(所以可以同时打开许许多多个shell窗口)

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

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

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

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进程~

以下为证:

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

探索Linux之 终端模拟器和伪终端交互原理相关推荐

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

    写在前面:本人水平有限,不少地方都是本身的理解,若有误导,欢迎指正linux # 终端模拟器指的是在linux桌面环境下运行的仿真终端(以下图)shell # 终端模拟器为啥叫模拟器呢? 由于真正的终 ...

  2. python打开伪终端_0xB:伪终端

    ##伪终端 这一章,我们来讲讲如何使用python做一个伪终端.不过在这之前你需要先了解一点伪终端的意思,还有一些技巧.这个我们会在下面讲到: 伪终端其实就是命令终端(cmd.exe,/bin/sh) ...

  3. win7 linux终端模拟器,SecureCRT(终端仿真器)

    SecureCRT是一款专业强大的终端仿真器,适用于Internet和Intranet,支持IPv6标准,有了它,你就可以在Windows系统中登陆UNIX或者Linux的服务器.SecureCRT是 ...

  4. linux 伪终端 pty 简介

    伪终端 伪终端(pseudo terminal,有时也被称为 pty)是指伪终端 master 和伪终端 slave 这一对字符设备.其中的 slave 对应 /dev/pts/ 目录下的一个文件,而 ...

  5. 模拟linux终端测试java,Linux 伪终端(pty)

    通过<Linux 终端(TTY)>一文我们了解到:我们常说的终端分为终端 tty1-6 和伪终端.使用 tty1-6 的情况一般为 Linux 系统直接连了键盘和显示器,或者是使用了 vS ...

  6. linux的终端,网络虚拟终端,伪终端

    linux的终端,网络虚拟终端,伪终端 转自:http://www.xuebuyuan.com/877887.html Linux上许多网络服务应用,如l2tp.pptp.telnet,都用到了伪终端 ...

  7. linux终端模拟器app下载,3C终端模拟器app下载-3C终端模拟器v0.9最新版下载 - 91手游网...

    应用介绍 3C终端模拟器是一个终端模拟的app,风格多变,轻松好用,还有功能各异的语句等你来试验,可以在其中运行属于你自己的脚本内容,并且这个软件是不限定使用的,这也就意味着你是否有ROOT并不影响这 ...

  8. linux终端模拟器

    linux终端模拟器 linux系统提供xterm,gnome-terminal,kconsole等终端,他们都是终端模拟器:这些终端模拟器与shell连接,提供可执行shell编程的gui,大部分l ...

  9. linux下伪终端的使用,Linux运维培训 Linux伪终端详解

    原标题:Linux运维培训 Linux伪终端详解 Linux运维培训 Linux伪终端详解Linux学习绕不开一个名词"终端",对于新手来说可能不了解,对于老鸟来说,可能弄不大清楚 ...

最新文章

  1. 解决ViewPager嵌套后子ViewPager不能滑动的方法
  2. 使用case when进行行转列
  3. azkaban安装编译3.86 教程
  4. 老的消息中间件投递失败的类型值_图文结合了解一下Java消息中间件的概述
  5. 【GIF动画+完整可运行源代码】C++实现 希尔排序——十大经典排序算法之四
  6. hibernate 映射四多对一双向映射
  7. Spring boot 通过ApplicationRunner在启动完成后按指定顺序执行任务
  8. window 显示本机信息的脚本 bat
  9. ffdshow 源代码分析 9: 编解码器有关类的总结
  10. 阿里云 网站https设置 sll申请与nginx跳转配置
  11. Windows按键翻译
  12. GNS3最新版安装教程
  13. jxbrowser错误The Chromium profile directory is already used/locked by another BrowserContext instance
  14. 你的APK安全吗?来WeTest免费测!
  15. 修复Ubuntu系统安装steam无法打开
  16. python:游戏倒计时器
  17. 看看老毛子士兵干的事情!
  18. 查询一个表中的两个字段值相同的数据
  19. android package_added 界面更新,如何在Android Oreo上注册ACTION_PACKAGE_ADDED和ACTION_PACKAGE_REMOVED?...
  20. 探索iptables BPF模块的悲惨历程

热门文章

  1. 互联网用户泛隐私安全热点问题回顾与浅析 (2012年3月)
  2. java 实现的电话号码查询程序 优化版(课程设计)
  3. Doubly Right Object Recognition: A Why Prompt for Visual Rationales
  4. Java图书借阅管理系统(含源码+论文+答辩PPT等)
  5. 个人备考PMP历程分享心得
  6. Vi编辑器完全使用手册(转)
  7. Python 编程风格
  8. 如何使用Smarty模板,使用模板的步骤
  9. Linux:无法删除文件,不允许操作
  10. 【计算机科学】【2013.08】无人机路径规划问题的算法研究