探索Linux之 终端模拟器和伪终端交互原理
写在前面:本人水平有限,很多地方都是自己的理解,如有误导,欢迎指正
# 终端模拟器指的是在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之 终端模拟器和伪终端交互原理相关推荐
- linux 伪终端原理,探索Linux之 终端模拟器和伪终端交互原理
写在前面:本人水平有限,不少地方都是本身的理解,若有误导,欢迎指正linux # 终端模拟器指的是在linux桌面环境下运行的仿真终端(以下图)shell # 终端模拟器为啥叫模拟器呢? 由于真正的终 ...
- python打开伪终端_0xB:伪终端
##伪终端 这一章,我们来讲讲如何使用python做一个伪终端.不过在这之前你需要先了解一点伪终端的意思,还有一些技巧.这个我们会在下面讲到: 伪终端其实就是命令终端(cmd.exe,/bin/sh) ...
- win7 linux终端模拟器,SecureCRT(终端仿真器)
SecureCRT是一款专业强大的终端仿真器,适用于Internet和Intranet,支持IPv6标准,有了它,你就可以在Windows系统中登陆UNIX或者Linux的服务器.SecureCRT是 ...
- linux 伪终端 pty 简介
伪终端 伪终端(pseudo terminal,有时也被称为 pty)是指伪终端 master 和伪终端 slave 这一对字符设备.其中的 slave 对应 /dev/pts/ 目录下的一个文件,而 ...
- 模拟linux终端测试java,Linux 伪终端(pty)
通过<Linux 终端(TTY)>一文我们了解到:我们常说的终端分为终端 tty1-6 和伪终端.使用 tty1-6 的情况一般为 Linux 系统直接连了键盘和显示器,或者是使用了 vS ...
- linux的终端,网络虚拟终端,伪终端
linux的终端,网络虚拟终端,伪终端 转自:http://www.xuebuyuan.com/877887.html Linux上许多网络服务应用,如l2tp.pptp.telnet,都用到了伪终端 ...
- linux终端模拟器app下载,3C终端模拟器app下载-3C终端模拟器v0.9最新版下载 - 91手游网...
应用介绍 3C终端模拟器是一个终端模拟的app,风格多变,轻松好用,还有功能各异的语句等你来试验,可以在其中运行属于你自己的脚本内容,并且这个软件是不限定使用的,这也就意味着你是否有ROOT并不影响这 ...
- linux终端模拟器
linux终端模拟器 linux系统提供xterm,gnome-terminal,kconsole等终端,他们都是终端模拟器:这些终端模拟器与shell连接,提供可执行shell编程的gui,大部分l ...
- linux下伪终端的使用,Linux运维培训 Linux伪终端详解
原标题:Linux运维培训 Linux伪终端详解 Linux运维培训 Linux伪终端详解Linux学习绕不开一个名词"终端",对于新手来说可能不了解,对于老鸟来说,可能弄不大清楚 ...
最新文章
- 解决ViewPager嵌套后子ViewPager不能滑动的方法
- 使用case when进行行转列
- azkaban安装编译3.86 教程
- 老的消息中间件投递失败的类型值_图文结合了解一下Java消息中间件的概述
- 【GIF动画+完整可运行源代码】C++实现 希尔排序——十大经典排序算法之四
- hibernate 映射四多对一双向映射
- Spring boot 通过ApplicationRunner在启动完成后按指定顺序执行任务
- window 显示本机信息的脚本 bat
- ffdshow 源代码分析 9: 编解码器有关类的总结
- 阿里云 网站https设置 sll申请与nginx跳转配置
- Windows按键翻译
- GNS3最新版安装教程
- jxbrowser错误The Chromium profile directory is already used/locked by another BrowserContext instance
- 你的APK安全吗?来WeTest免费测!
- 修复Ubuntu系统安装steam无法打开
- python:游戏倒计时器
- 看看老毛子士兵干的事情!
- 查询一个表中的两个字段值相同的数据
- android package_added 界面更新,如何在Android Oreo上注册ACTION_PACKAGE_ADDED和ACTION_PACKAGE_REMOVED?...
- 探索iptables BPF模块的悲惨历程