822A - 協議棧、終端、shell、控制檯

 協議棧是指網絡中各層協議的總和,其形象的反映了一個網絡中文件傳輸的過程:由上層協議到底層協議,再由底層協議到上層協議。使用最廣泛的是英特網協議棧,由上到下的協議分別是:應用層(HTTP,FTP,TFTP,TELNET,DNS,EMAIL等),運輸層(TCP,UDP),網絡層(IP),鏈路層(WI-FI,以太網,令牌環,FDDI,MAC等)。


進程組
---------------------------------------------
進程組是一個或多個進程的集合。每個進程組有一個稱爲組長的進程,組長進程就是其進程號(pid)等於進程組號(gid)的進程(即進程組號等於組長的進程號)。進程組的概念有很多用途,最常見的是我們在終端上鍵入終止信號(Ctrl-C),內核將該信號送給前臺進程組的所有進程,該信號默認時會終止前臺進程組中的所有進程。
(1). Shell上的一條命令或由管道線連接的幾條命令形成一個進程組
(2). 每個進程只屬於一個進程組
(3). 每個進程組有一個領頭進程(組長)
(4). 進程組的生命週期到組中最後一個進程終止, 或加入其他進程組爲止
(5). 前臺進程組和後臺進程組
(6). 子進程繼承其父進程的進程組id
(7).getpgrp: 獲得進程組 id, 即領頭進程的 pid ;setpgid: 加入進程組和建立新的進程組
#include <unistd.h>
int setpgid (pid_t pid, pid_t pgid);
pid_t getpgid (pid_t pid);
int setpgrp (void);
pid_t getpgrp (void);
進程只能爲自身和其子進程設置爲進程組 id,當子進程調用 exec 函數之後, 父進就
不能再爲它設置進程組 id.

會話
---------------------------------------------
會話期(Session,或者稱爲會話)則是一個或多個進程組的集合,有唯一一個會話期首進程(session leader)。會話期ID爲首進程的ID。會話期可以有一個單獨的控制終端(contr
olling terminal)。會話首進程與控制終端建立連接,因此也叫做控制進程(controlling process)。當前與終端交互的進程稱爲前臺進程組。其餘進程組稱爲後臺進程組。通常情況下,用戶登錄後所執行的所有程序都屬於一個會話期,而其登錄 shell則是會話期首進程(Session leader),並且它所使用的終端就是會話期的控制終端(Controlling Terminal
)。當我們退出登錄(logout)時,所有屬於這個會話期的進程都將被終止。
(1). 一次登錄形成一個會話
(2). 一個會話可包含多個進程組, 但只能有一個前臺進程組.
(3). setsid()可建立一個新的會話;如果調用該函數的進程不是進程組的領頭進程, 該函數才能建立新的會話.調用setsid時發生:調用 setsid 之後, 進程成爲新會話的領頭進程;
進程成爲新進程組的領頭進程;進程失去控制終端。
#include <unistd.h>
pid_t setsid(void);
(4).  會話首進程(控制進程)tcsetpgrp將控制終端分配給同一會話的其他進程組,該進程組就成了新的前臺進程組。
#include <unistd.h>
int tcsetpgrp(int filedes,pid_t pgrpid);

控制終端
---------------------------------------------
(1) 會話的領頭進程打開一個終端之後, 該終端就成爲該會話的控制終端 (SVR4/Linux)
(2) 與控制終端建立連接的會話領頭進程也稱爲控制進程 (session leader)
(3) 一個會話只能有一個控制終端
(4) 產生在控制終端上的輸入和信號將發送給會話的前臺進程組中的所有進程
(5) 當終端接口檢測到網絡連接斷開或終端窗口關閉時, 掛起信號SIGHUP將發送到控制進程(session leader) 。該信號默認動作是終止進程。 如果會話期首進程終止,則該信號發送到該會話期前臺進程組的所有進程。

圖1

 

 

圖2
分類: linux 2012-03-20 19:51 37人閱讀 評論(0) 收藏 舉報
終端(terminal,或者叫物理終端): 
是一種設備,不是一個程序,一般說的就是能提供命令行用戶界面的設備,典型的是屏幕和鍵盤,或其他的一些物理終端。
虛擬終端: 
屏幕和鍵盤只是一個終端,可能不夠用,又不想增加設備投入,就產生了虛擬終端。
gnome-terminal,urxvt,mlterm,xterm等等:
是一個程序,職責是模擬終端設備,和虛擬終端的區別表面上在於它以 GUI 形式的窗口出現,內部則是程序結構和系統控制結構有所不同,但本質上差不多。
控制檯(console): 
顯示系統消息的終端就叫控制檯,Linux 默認所有虛擬終端都是控制檯,都能顯示系統消息。
但有時專指CLI下的模擬終端設備的一個程序,和gnome-terminal,urxvt,mlterm,xterm等相同,只是CLI和GUI界面的區別。一般console有6個,tty1-6,CTRL+ALT+fn切換。還沒聽說過怎麼換console


shell是一個抽象概念,shell的一切操作都在計算機內部,負責處理人機交互,執行腳本等,是操作系統能正常運行的重要組成部分
bash,ash,zsh,tcsh等是shell這個抽象概念的一種具體的實現,都是一個程序,都能生成一個進程對象。
如果想換shell的程序,可以修改/etc/passwd,把裏面的/bin/bash換成你想要的shell,或者用chsh命令來切換


shell與終端的關係:shell把一些信息適當的輸送到終端設備,同時還接收來自終端設備的輸入。一般每個shell進程都會有一個終端關聯,也可以沒有。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章