全面理解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 进程)说话,传声筒将声音(命令)传递出去,并将回声(执行结果)传回给人们(用户)。 系列文章第二篇:进程组,会话的基础概念,以及进程组,会话,控制终端,前台后台之间的联系最后的最后,如果你觉得我的这篇文章写的不错的话,请给我一个赞与收藏,关注我,我会继续给大家带来更多更优质的干货内容。 |
CopyRight 2018-2019 实验室设备网 版权所有 |