前言
这个系列的文章有四篇,其目的是为了搞清楚:
-
进程,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进程将我们的远程终端设置成为这个会话的控制终端。
- 也就是说,Linux主机同意与我们的终端建立连接的时候:
-
控制终端的作用是:
- 输入输出设备:控制终端通常用作会话中所有进程的默认输入和输出设备。
- 信号发送:控制终端可以用来向前台进程组中的进程发送信号。
- 作业控制:控制终端也用于实现 Unix 的作业控制功能。
- 终端设备的参数控制:通过控制终端,可以对终端设备的各种参数进行控制,比如字符的显示方式、输入输出速度等。
- 会话的划分:控制终端是划分不同会话的一个重要标志。每个会话都有一个与之关联的控制终端,通过这个控制终端,用户可以与会话中的进程进行交互。
总之,当我们的那个登录终端,成为了一个会话的控制终端后,才会具有以上的这些功能,拥有了这些功能,我们才能在Linux系统上展开一些工作。这也就是我对控制终端的理解。
总结
-
Shell 进程:当你打开一个终端窗口时,会启动一个 Shell 进程。这个 Shell 进程提供一个命令行界面,用于接收用户的输入,解析这些输入,然后执行相应的命令。
-
终端:终端是用户与操作系统交互的接口。用户在终端输入命令,这些命令由 Shell 进程接收并执行。执行的结果再通过 Shell 进程返回到终端显示。
-
交互方式:用户在终端输入命令,Shell 进程接收并解析这些命令,然后调用相应的程序执行。执行的结果再通过 Shell 进程返回到终端,显示给用户。
-
关系:Shell 进程和终端之间的关系非常密切。Shell 进程就像是终端(用户)和操作系统之间的桥梁,它接收用户在终端的输入,解析并执行这些输入,然后将执行结果返回到终端显示给用户。
简而言之,Shell 进程与终端之间的关系就像是一个传声筒和人们之间的关系:人们通过传声筒(Shell 进程)说话,传声筒将声音(命令)传递出去,并将回声(执行结果)传回给人们(用户)
。文章来源:https://www.toymoban.com/news/detail-440053.html
- 系列文章第二篇:进程组,会话的基础概念,以及进程组,会话,控制终端,前台后台之间的联系
最后的最后,如果你觉得我的这篇文章写的不错的话,请给我一个赞与收藏,关注我,我会继续给大家带来更多更优质的干货内容
。文章来源地址https://www.toymoban.com/news/detail-440053.html
到了这里,关于shell进程,终端的概念,以及它们之间有什么区别与联系?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!