前言
這個(gè)系列的文章有四篇,其目的是為了搞清楚:
-
進(jìn)程,shell,shell進(jìn)程,終端,控制終端,前臺(tái)進(jìn)程,后臺(tái)進(jìn)程,控制進(jìn)程,前臺(tái)進(jìn)程組,后臺(tái)進(jìn)程組,會(huì)話,守護(hù)進(jìn)程,init進(jìn)程,用戶進(jìn)程,系統(tǒng)進(jìn)程
它們之間的聯(lián)系與區(qū)別 - 系列文章第二篇傳送門:全面理解進(jìn)程組,會(huì)話的基礎(chǔ)概念,以及進(jìn)程組,會(huì)話,控制終端,前臺(tái)進(jìn)程組與后臺(tái)進(jìn)程組之間的聯(lián)系(系列文章第二篇)
- 系列文章第三篇傳送門: 全面理解守護(hù)進(jìn)程的基礎(chǔ)概念,以及如何創(chuàng)建一個(gè)守護(hù)進(jìn)程(系列文章第三篇)
- 系列文章第四篇傳送門:全面理解前臺(tái)進(jìn)程,后臺(tái)進(jìn)程的概念,以及之間如何切換,init進(jìn)程與系列文章大總結(jié)(系列文章第四篇)
那么接下來(lái),就請(qǐng)我一點(diǎn)一點(diǎn)為大家解開(kāi),這里的廬山真面目
shell進(jìn)程與終端的基礎(chǔ)概念
什么是Shell
Shell 是操作系統(tǒng)的一個(gè)接口,提供了一個(gè)命令行界面,用戶可以通過(guò)這個(gè)界面與操作系統(tǒng)交互。在 Unix/Linux 系統(tǒng)中,Shell 是一個(gè)命令行解釋器,它解釋用戶輸入的命令并調(diào)用相應(yīng)的程序執(zhí)行。Shell 還是一個(gè)編程環(huán)境,可以編寫復(fù)雜的 shell 腳本。
什么是進(jìn)程
進(jìn)程是計(jì)算機(jī)中的程序關(guān)于某數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位。進(jìn)程之間是相互獨(dú)立的,每個(gè)進(jìn)程均運(yùn)行在其專用且受保護(hù)的內(nèi)存空間內(nèi)。
更多的具體的關(guān)于進(jìn)程的基礎(chǔ)概念大家可以看我的這篇文章:
- 進(jìn)程的基礎(chǔ)概念
- 進(jìn)程的多種狀態(tài),狀態(tài)間如何轉(zhuǎn)換,以及進(jìn)程相關(guān)的命令
什么是終端
- 終端(Terminal)最初是指物理設(shè)備,如鍵盤和顯示器。在 Unix/Linux 系統(tǒng)中,終端成為了一種抽象概念,指的是通過(guò)某種方式(物理或網(wǎng)絡(luò))與系統(tǒng)交互的一個(gè)接口。
- 現(xiàn)在的終端更多的是指一種設(shè)備或者是一個(gè)應(yīng)用程序(如你在使用的ssh終端或圖形界面下的終端模擬器),它為用戶與操作系統(tǒng)交互提供了環(huán)境。在Unix/Linux中,每個(gè)終端都會(huì)對(duì)應(yīng)一個(gè)設(shè)備文件,例如/dev/tty1,/dev/tty2等。
shell進(jìn)程與終端之間的關(guān)系
現(xiàn)在我們來(lái)看一下 Shell 進(jìn)程 和 終端 之間的關(guān)系。
-
當(dāng)你打開(kāi)一個(gè)終端窗口(例如,通過(guò) ssh 登錄,或者在 GUI 下打開(kāi)一個(gè)控制臺(tái)窗口)時(shí),會(huì)創(chuàng)建一個(gè) Shell 進(jìn)程。這個(gè) Shell 進(jìn)程會(huì)在終端接收你的輸入,解析這些輸入,然后執(zhí)行相應(yīng)的命令。因此,Shell 進(jìn)程就像是終端(用戶)和操作系統(tǒng)之間的媒介。
-
為了更好地理解,我們可以想象這樣一種場(chǎng)景:你在終端窗口中鍵入命令 “l(fā)s”,然后按回車。此時(shí),Shell 進(jìn)程接收到 “l(fā)s” 命令,解析它,并調(diào)用 “l(fā)s” 程序。 “l(fā)s” 程序運(yùn)行后,將輸出發(fā)送回 Shell 進(jìn)程,Shell 進(jìn)程再將這些輸出顯示在終端窗口中。這就是 Shell 進(jìn)程與終端之間的基本交互方式。
再一次的,更進(jìn)一步的深入了解進(jìn)程與終端之間的關(guān)系
-
在 UNIX 系統(tǒng)中,
當(dāng)用戶通過(guò)終端登錄系統(tǒng)后
,的確會(huì)得到一個(gè) shell 進(jìn)程,這個(gè)終端成為 shell 進(jìn)程的控制終端
。這里的"控制終端" 是指能夠接收用戶輸入并顯示程序輸出的設(shè)備或虛擬設(shè)備
。 -
對(duì)于每一個(gè)進(jìn)程,它的
控制終端信息
是保存在
它的進(jìn)程控制塊(Process Control Block,PCB
)中
的。當(dāng) shell 進(jìn)程使用 fork() 創(chuàng)建新的進(jìn)程時(shí),新的進(jìn)程會(huì)繼承 shell 進(jìn)程的 PCB 信息,包括控制終端的信息,因此新的進(jìn)程的控制終端也是同一個(gè)終端。 -
在 UNIX 系統(tǒng)中,每個(gè)進(jìn)程都有三個(gè)默認(rèn)的文件描述符:標(biāo)準(zhǔn)輸入(stdin,文件描述符為 0),標(biāo)準(zhǔn)輸出(stdout,文件描述符為 1),以及標(biāo)準(zhǔn)錯(cuò)誤輸出(stderr,文件描述符為 2)。
- 默認(rèn)情況下(沒(méi)有重定向),這些文件描述符都指向控制終端。因此,
進(jìn)程從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),就是讀取用戶在終端的鍵盤輸入;進(jìn)程向標(biāo)準(zhǔn)輸出或標(biāo)準(zhǔn)錯(cuò)誤輸出寫數(shù)據(jù),就是向終端的顯示器輸出
。
- 默認(rèn)情況下(沒(méi)有重定向),這些文件描述符都指向控制終端。因此,
-
控制終端還有一個(gè)重要的功能,就是能夠向前臺(tái)進(jìn)程發(fā)送信號(hào)。在 UNIX 系統(tǒng)中,有一些特殊的鍵盤輸入可以產(chǎn)生信號(hào)。例如:
- Ctrl + C 會(huì)產(chǎn)生 SIGINT 信號(hào),這是一個(gè)中斷信號(hào),用來(lái)請(qǐng)求進(jìn)程終止運(yùn)行;
- Ctrl + \ 會(huì)產(chǎn)生 SIGQUIT 信號(hào),這也是一個(gè)請(qǐng)求進(jìn)程終止運(yùn)行的信號(hào),但與 SIGINT 不同,SIGQUIT 還會(huì)產(chǎn)生 core dump 文件,用來(lái)保存進(jìn)程終止時(shí)的狀態(tài),以供后續(xù)分析。
再再再次的深入了解到底什么是控制終端,從產(chǎn)生到作用
- 當(dāng)我們通過(guò)SSH等遠(yuǎn)程登錄工具連接到Linux主機(jī)時(shí),遠(yuǎn)程登錄服務(wù)會(huì)啟動(dòng)一個(gè)shell進(jìn)程來(lái)處理你的命令請(qǐng)求,這個(gè)新啟動(dòng)的shell進(jìn)程會(huì)創(chuàng)建一個(gè)新的會(huì)話,并將你的遠(yuǎn)程終端設(shè)置為這個(gè)會(huì)話的控制終端。
- 也就是說(shuō),Linux主機(jī)同意與我們的終端建立連接的時(shí)候:
- 第一步:系統(tǒng)會(huì)啟動(dòng)一個(gè)shell進(jìn)程
- 第二步:shell進(jìn)程會(huì)創(chuàng)建一個(gè)新的會(huì)話,并自己成為該會(huì)話的領(lǐng)頭進(jìn)程
- 第三步:shell進(jìn)程將我們的遠(yuǎn)程終端設(shè)置成為這個(gè)會(huì)話的控制終端。
- 也就是說(shuō),Linux主機(jī)同意與我們的終端建立連接的時(shí)候:
-
控制終端的作用是:
- 輸入輸出設(shè)備:控制終端通常用作會(huì)話中所有進(jìn)程的默認(rèn)輸入和輸出設(shè)備。
- 信號(hào)發(fā)送:控制終端可以用來(lái)向前臺(tái)進(jìn)程組中的進(jìn)程發(fā)送信號(hào)。
- 作業(yè)控制:控制終端也用于實(shí)現(xiàn) Unix 的作業(yè)控制功能。
- 終端設(shè)備的參數(shù)控制:通過(guò)控制終端,可以對(duì)終端設(shè)備的各種參數(shù)進(jìn)行控制,比如字符的顯示方式、輸入輸出速度等。
- 會(huì)話的劃分:控制終端是劃分不同會(huì)話的一個(gè)重要標(biāo)志。每個(gè)會(huì)話都有一個(gè)與之關(guān)聯(lián)的控制終端,通過(guò)這個(gè)控制終端,用戶可以與會(huì)話中的進(jìn)程進(jìn)行交互。
總之,當(dāng)我們的那個(gè)登錄終端,成為了一個(gè)會(huì)話的控制終端后,才會(huì)具有以上的這些功能,擁有了這些功能,我們才能在Linux系統(tǒng)上展開(kāi)一些工作。這也就是我對(duì)控制終端的理解。
總結(jié)
-
Shell 進(jìn)程:當(dāng)你打開(kāi)一個(gè)終端窗口時(shí),會(huì)啟動(dòng)一個(gè) Shell 進(jìn)程。這個(gè) Shell 進(jìn)程提供一個(gè)命令行界面,用于接收用戶的輸入,解析這些輸入,然后執(zhí)行相應(yīng)的命令。
-
終端:終端是用戶與操作系統(tǒng)交互的接口。用戶在終端輸入命令,這些命令由 Shell 進(jìn)程接收并執(zhí)行。執(zhí)行的結(jié)果再通過(guò) Shell 進(jìn)程返回到終端顯示。
-
交互方式:用戶在終端輸入命令,Shell 進(jìn)程接收并解析這些命令,然后調(diào)用相應(yīng)的程序執(zhí)行。執(zhí)行的結(jié)果再通過(guò) Shell 進(jìn)程返回到終端,顯示給用戶。
-
關(guān)系:Shell 進(jìn)程和終端之間的關(guān)系非常密切。Shell 進(jìn)程就像是終端(用戶)和操作系統(tǒng)之間的橋梁,它接收用戶在終端的輸入,解析并執(zhí)行這些輸入,然后將執(zhí)行結(jié)果返回到終端顯示給用戶。
簡(jiǎn)而言之,Shell 進(jìn)程與終端之間的關(guān)系就像是一個(gè)傳聲筒和人們之間的關(guān)系:人們通過(guò)傳聲筒(Shell 進(jìn)程)說(shuō)話,傳聲筒將聲音(命令)傳遞出去,并將回聲(執(zhí)行結(jié)果)傳回給人們(用戶)
。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-440053.html
- 系列文章第二篇:進(jìn)程組,會(huì)話的基礎(chǔ)概念,以及進(jìn)程組,會(huì)話,控制終端,前臺(tái)后臺(tái)之間的聯(lián)系
最后的最后,如果你覺(jué)得我的這篇文章寫的不錯(cuò)的話,請(qǐng)給我一個(gè)贊與收藏,關(guān)注我,我會(huì)繼續(xù)給大家?guī)?lái)更多更優(yōu)質(zhì)的干貨內(nèi)容
。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-440053.html
到了這里,關(guān)于shell進(jìn)程,終端的概念,以及它們之間有什么區(qū)別與聯(lián)系?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!