shell进程,终端的概念,以及它们之间有什么区别与联系?

这篇具有很好参考价值的文章主要介绍了shell进程,终端的概念,以及它们之间有什么区别与联系?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

这个系列的文章有四篇,其目的是为了搞清楚

  • 进程,shell,shell进程,终端,控制终端,前台进程,后台进程,控制进程,前台进程组,后台进程组,会话,守护进程,init进程,用户进程,系统进程 它们之间的联系与区别
  • 系列文章第二篇传送门:全面理解进程组,会话的基础概念,以及进程组,会话,控制终端,前台进程组与后台进程组之间的联系(系列文章第二篇)
  • 系列文章第三篇传送门: 全面理解守护进程的基础概念,以及如何创建一个守护进程(系列文章第三篇)
  • 系列文章第四篇传送门:全面理解前台进程,后台进程的概念,以及之间如何切换,init进程与系列文章大总结(系列文章第四篇)

那么接下来,就请我一点一点为大家解开,这里的庐山真面目

shell进程与终端的基础概念

什么是Shell

Shell 是操作系统的一个接口,提供了一个命令行界面,用户可以通过这个界面与操作系统交互。在 Unix/Linux 系统中,Shell 是一个命令行解释器,它解释用户输入的命令并调用相应的程序执行。Shell 还是一个编程环境,可以编写复杂的 shell 脚本。

什么是进程

进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。进程之间是相互独立的,每个进程均运行在其专用且受保护的内存空间内。

更多的具体的关于进程的基础概念大家可以看我的这篇文章:

  • 进程的基础概念
  • 进程的多种状态,状态间如何转换,以及进程相关的命令

什么是终端

  • 终端(Terminal)最初是指物理设备,如键盘和显示器。在 Unix/Linux 系统中,终端成为了一种抽象概念,指的是通过某种方式(物理或网络)与系统交互的一个接口。
  • 现在的终端更多的是指一种设备或者是一个应用程序(如你在使用的ssh终端或图形界面下的终端模拟器),它为用户与操作系统交互提供了环境。在Unix/Linux中,每个终端都会对应一个设备文件,例如/dev/tty1,/dev/tty2等。

shell进程与终端之间的关系

现在我们来看一下 Shell 进程 和 终端 之间的关系。

  • 当你打开一个终端窗口(例如,通过 ssh 登录,或者在 GUI 下打开一个控制台窗口)时,会创建一个 Shell 进程。这个 Shell 进程会在终端接收你的输入,解析这些输入,然后执行相应的命令。因此,Shell 进程就像是终端(用户)和操作系统之间的媒介。

  • 为了更好地理解,我们可以想象这样一种场景:你在终端窗口中键入命令 “ls”,然后按回车。此时,Shell 进程接收到 “ls” 命令,解析它,并调用 “ls” 程序。 “ls” 程序运行后,将输出发送回 Shell 进程,Shell 进程再将这些输出显示在终端窗口中。这就是 Shell 进程与终端之间的基本交互方式。

再一次的,更进一步的深入了解进程与终端之间的关系

  • 在 UNIX 系统中,当用户通过终端登录系统后,的确会得到一个 shell 进程,这个终端成为 shell 进程的控制终端。这里的 "控制终端" 是指能够接收用户输入并显示程序输出的设备或虚拟设备

  • 对于每一个进程,它的控制终端信息保存在它的进程控制块(Process Control Block,PCB的。当 shell 进程使用 fork() 创建新的进程时,新的进程会继承 shell 进程的 PCB 信息,包括控制终端的信息,因此新的进程的控制终端也是同一个终端。

  • 在 UNIX 系统中,每个进程都有三个默认的文件描述符:标准输入(stdin,文件描述符为 0),标准输出(stdout,文件描述符为 1),以及标准错误输出(stderr,文件描述符为 2)。

    • 默认情况下(没有重定向),这些文件描述符都指向控制终端。因此,进程从标准输入读取数据,就是读取用户在终端的键盘输入;进程向标准输出或标准错误输出写数据,就是向终端的显示器输出
  • 控制终端还有一个重要的功能,就是能够向前台进程发送信号。在 UNIX 系统中,有一些特殊的键盘输入可以产生信号。例如:

    • Ctrl + C 会产生 SIGINT 信号,这是一个中断信号,用来请求进程终止运行;
    • Ctrl + \ 会产生 SIGQUIT 信号,这也是一个请求进程终止运行的信号,但与 SIGINT 不同,SIGQUIT 还会产生 core dump 文件,用来保存进程终止时的状态,以供后续分析。

再再再次的深入了解到底什么是控制终端,从产生到作用

  • 当我们通过SSH等远程登录工具连接到Linux主机时,远程登录服务会启动一个shell进程来处理你的命令请求,这个新启动的shell进程会创建一个新的会话,并将你的远程终端设置为这个会话的控制终端。
    • 也就是说,Linux主机同意与我们的终端建立连接的时候:
      • 第一步:系统会启动一个shell进程
      • 第二步:shell进程会创建一个新的会话,并自己成为该会话的领头进程
      • 第三步:shell进程将我们的远程终端设置成为这个会话的控制终端。
  • 控制终端的作用是
    • 输入输出设备:控制终端通常用作会话中所有进程的默认输入和输出设备。
    • 信号发送:控制终端可以用来向前台进程组中的进程发送信号。
    • 作业控制:控制终端也用于实现 Unix 的作业控制功能。
    • 终端设备的参数控制:通过控制终端,可以对终端设备的各种参数进行控制,比如字符的显示方式、输入输出速度等。
    • 会话的划分:控制终端是划分不同会话的一个重要标志。每个会话都有一个与之关联的控制终端,通过这个控制终端,用户可以与会话中的进程进行交互。

总之,当我们的那个登录终端,成为了一个会话的控制终端后,才会具有以上的这些功能,拥有了这些功能,我们才能在Linux系统上展开一些工作。这也就是我对控制终端的理解。

总结

  • Shell 进程:当你打开一个终端窗口时,会启动一个 Shell 进程。这个 Shell 进程提供一个命令行界面,用于接收用户的输入,解析这些输入,然后执行相应的命令。

  • 终端:终端是用户与操作系统交互的接口。用户在终端输入命令,这些命令由 Shell 进程接收并执行。执行的结果再通过 Shell 进程返回到终端显示。

  • 交互方式:用户在终端输入命令,Shell 进程接收并解析这些命令,然后调用相应的程序执行。执行的结果再通过 Shell 进程返回到终端,显示给用户。

  • 关系:Shell 进程和终端之间的关系非常密切。Shell 进程就像是终端(用户)和操作系统之间的桥梁,它接收用户在终端的输入,解析并执行这些输入,然后将执行结果返回到终端显示给用户。

简而言之,Shell 进程与终端之间的关系就像是一个传声筒和人们之间的关系:人们通过传声筒(Shell 进程)说话,传声筒将声音(命令)传递出去,并将回声(执行结果)传回给人们(用户)

  • 系列文章第二篇:进程组,会话的基础概念,以及进程组,会话,控制终端,前台后台之间的联系

最后的最后,如果你觉得我的这篇文章写的不错的话,请给我一个赞与收藏,关注我,我会继续给大家带来更多更优质的干货内容文章来源地址https://www.toymoban.com/news/detail-440053.html

到了这里,关于shell进程,终端的概念,以及它们之间有什么区别与联系?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • J9数字论:什么是公链、联盟链、私有链?它们之间区别在哪?

    公有链是任何人都能参与读取、交易、写入的区块链,完全去中心化,账本信息公开透明,不受任何机构控制。公有链一般都需要挖矿来达成共识,因此带来了交易延时高、成本高和效率低等缺点。公有链的典型代表有比特币、以太坊、EOS等。私有链是指记账权由单独的个人

    2024年02月12日
    浏览(44)
  • java中操作字符串都有哪些类?它们之间有什么区别?

    Java中常用的字符串操作类有: String类是Java中最常用的字符串类,它是不可变的字符串,即创建后不能被修改。 StringBuilder类也是一个字符串操作类,但它是可变的,即可以修改已经创建的字符串对象。StringBuilder比String更适合在程序中进行字符串拼接操作。 StringBuffer类与St

    2023年04月21日
    浏览(83)
  • 485、CAN、单总线、SPI、I2C的概念,特点,协议,使用方法及通信方式,还有它们之间的区别

    1. 485:485(一般称作 RS485/EIA-485)是隶属于 OSI 模型物理层的电气特性规定为 2 线,半双工,多点通信的标准。它的电气特性和 RS-232 大不一样。用缆线两端的电压差值来表示传递信号。 2. CAN:CAN,全称为“Controller Area Network”,即控制器局域网,是一种多主方式的串行通讯总

    2024年02月10日
    浏览(54)
  • 06 为什么需要多线程;多线程的优缺点;程序 进程 线程之间的关系;进程和线程之间的区别

    CPU、内存、IO之间的性能差异巨大 多核心CPU的发展 线程的本质是增加一个可以执行代码工人 多线程的优点 多个执行流,并行执行。(多个工人,干不一样的活) 多线程的缺点 上下文切换慢,切换上下文典型值1us vs 0.3ns/cycle CPU在执行A任务(A没有执行完)时,切换到任务B,需

    2024年02月14日
    浏览(51)
  • 在Qt中List View和List Widget的区别是什么,以及如何使用它们

    2023年10月29日,周日晚上 目录 List View和List Widget的区别 如何使用QListView 如何使用QListWidget 在Qt中,QListView 和 QListWidget 是用于显示列表数据的两个常用控件,它们有一些区别和特点。 1. 数据模型:         QListView 使用 QAbstractItemModel 数据模型来管理和显示列表数据,而

    2024年02月08日
    浏览(46)
  • css中预编译理解,它们之间区别

    css预编译器用一种专门的编程语言,它可以对web页面样式然后再编译成正常css文件,可以更加方便和高效的编写css代表。主要作用就是为css提供了变量,函数,嵌套,继承,混合等功能,以及更加易于维护和组织代码的结构。 常见的css预编译语言有:sass,less和stylus等等 区别

    2024年02月15日
    浏览(53)
  • NLP和LLMs: 理解它们之间的区别

    NLP(自然语言处理)和LLMs(大型语言模型)都与处理自然语言相关,但它们的重点和范围略有不同。 自然语言处理(NLP): 定义 : 自然语言处理(NLP)是人工智能领域的一个子领域,专注于研究和开发使计算机能够理解、处理、生成自然语言文本的技术和方法。 目标 :

    2024年04月17日
    浏览(41)
  • Elasticsearch:Text vs. Keyword - 它们之间的差异以及它们的行为方式

    很多刚开始学习 Elasticsearch 的人经常会混淆 text 和 keyword 字段数据类型。 它们之间的区别很简单,但非常关键。 在本文中,我将讨论两者之间的区别、如何使用它们、它们的行为方式以及使用哪一种。 它们之间的关键区别在于,Elasticsearch 会在将 text 存储到倒排索引之前对

    2024年02月03日
    浏览(84)
  • Buildroot,Ubuntu,Debian,Yocto 它们分别是什么,它们之间的具体关系是什么

    1. Buildroot 定义: Buildroot是一个简化和加速嵌入式Linux系统开发过程的工具,提供一种容易、高效的方式来生成交叉编译工具链、根文件系统、内核映像和引导加载程序。Buildroot使用makefile和kconfig(和Linux内核使用的相同系统)来配置和构建整个嵌入式系统。 适用场景: 对于

    2024年04月25日
    浏览(36)
  • 什么是Docker的容器编排工具,它们之间有何不同?

    随着Docker容器技术的广泛应用,容器编排工具成为了自动化部署、扩展和管理容器化应用程序的关键组件。这些工具提供了一种抽象层,帮助开发者和管理员更高效地管理大量的Docker容器,确保它们在不同的主机和环境中能够可靠地运行。目前,市场上流行的Docker容器编排工

    2024年02月19日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包