终端的概念
操作系統(tǒng)接口:用戶接口和程序接口。用戶接口分為聯(lián)機用戶接口和脫機用戶接口。脫機用戶接口出現(xiàn)在早期的批處理系統(tǒng)中(將作業(yè)提前交給操作系統(tǒng),作業(yè)完成的過程中用戶無法交互);聯(lián)機用戶接口即為終端(所有輸入輸出設(shè)備),包括設(shè)備終端(偽終端,pseudo terminal slave)、文字終端(字符終端)和桌面終端(圖形界面終端),聯(lián)機用戶接口可以使用戶與操作系統(tǒng)實時交互。而程序接口就是指操作系統(tǒng)提供的各種系統(tǒng)調(diào)用接口(API,應用程序接口),通過這些函數(shù)接口可以使用這些系統(tǒng)調(diào)用。
終端:所有輸入輸出設(shè)備的總稱,如鍵盤、鼠標、攝像頭、麥克風、屏幕、打印機等。
在UNIX系統(tǒng)中,用戶通過終端登錄系統(tǒng)后得到一個Shell進程,這個終端成為Shell進程的控制終端(Controlling Terminal),進程中,控制終端是保存在PCB中的信息,而fork會復制PCB中的信息,因此由Shell進程啟動的其它進程的控制終端也是這個終端。默認情況下(沒有重定向),每個進程的標準輸入、標準輸出和標準錯誤輸出都指向控制終端,進程從標準輸入讀也就是讀用戶的鍵盤輸入,進程往標準輸出或標準錯誤輸出寫也就是輸出到顯示器上。信號中還講過,在控制終端輸入一些特殊的控制鍵可以給前臺進程發(fā)信號,例如Ctrl-C表示SIGINT,Ctrl-\表示SIGQUIT。
Linux下的終端類型:設(shè)備終端,又叫偽終端(pts/編號,如bash終端,/bin/bash)、文字終端(tty1-tty6,共6個)、圖形界面終端(tty7或:0,也叫桌面終端)。
圖形界面終端(桌面終端):tty7或:0,Alt + Ctrl + F7進入;文字終端(字符終端):tty1~tty6,Alt + Ctrl + F1、F2、F3、F4、F5、F6進入;設(shè)備終端(偽終端):pts/編號,從0開始;網(wǎng)絡(luò)終端:SSH、Telnet、xshell等。每一個網(wǎng)絡(luò)終端在服務器上都會對應一個偽終端,網(wǎng)絡(luò)終端輸入的各種命令或程序都先通過網(wǎng)絡(luò)協(xié)議發(fā)送到服務器,這些命令或程序在服務器上(偽終端)解析和執(zhí)行,將執(zhí)行結(jié)果又通過網(wǎng)絡(luò)通信協(xié)議發(fā)送給客服端(網(wǎng)絡(luò)終端)。因此,網(wǎng)絡(luò)終端,如xshell,與主機之間交互需要網(wǎng)絡(luò)通信。文字終端與設(shè)備終端相似,都是以命令行的方式與系統(tǒng)進行交互。在Windows中的文字終端打開方式:win+r 輸入cmd即可。
在top或ps命令中,TTY表示該進程來自于哪一個終端(設(shè)備、文字和桌面),?表示該進程不需要終端,即不需要登錄到系統(tǒng),不能與用戶交互。進程可能屬于終端,也可能屬于系統(tǒng)自己的。終端本身會對應一個進程。如守護進程就不需要終端,不需要登錄到系統(tǒng),是Linux中的后臺服務進程,通常獨立于控制終端并且周期性地執(zhí)行某種任務或等待處理某些發(fā)生的事件。
總結(jié)