【Linux/Unix系統(tǒng)編程手冊(cè)筆記】基本概念

1.操作系統(tǒng)的核心——內(nèi)核

管理和分配計(jì)算機(jī)資源(即CPU催首、RAM和設(shè)備)的核心層軟件操漠。

Linux內(nèi)核可執(zhí)行文件采用/boot/vmlinuz或與之類似的路徑名洒疚。

內(nèi)核的職責(zé)

  • 進(jìn)程調(diào)度
    • 搶占式多任務(wù)操作系統(tǒng)
  • 內(nèi)存管理
    • Linux采用虛擬內(nèi)存管理機(jī)制
    • 進(jìn)程與進(jìn)程之間鸠姨,進(jìn)程與內(nèi)核之間彼此隔離
    • 只需將進(jìn)程的一部分保持在內(nèi)存中
  • 文件系統(tǒng)
    • 內(nèi)核在磁盤(pán)之上提供了文件系統(tǒng)寂拆,允許對(duì)文件執(zhí)行創(chuàng)建奢米、獲取抓韩、更新以及刪除等操作
  • 創(chuàng)建和終止進(jìn)程
  • 對(duì)設(shè)備的訪問(wèn)
    • 與外設(shè)的通信機(jī)制包括輸入、輸出或兩者兼而有之
    • 內(nèi)核既為程序訪問(wèn)設(shè)備提供了簡(jiǎn)化版的標(biāo)準(zhǔn)接口鬓长,同時(shí)還要仲裁多個(gè)進(jìn)程對(duì)一個(gè)設(shè)備的訪問(wèn)
  • 聯(lián)網(wǎng)
    • 內(nèi)核以用戶進(jìn)程的名義收發(fā)網(wǎng)絡(luò)消息(數(shù)據(jù)包)
  • 提供系統(tǒng)調(diào)用應(yīng)用編程接口
    • 進(jìn)程可利用內(nèi)核入口點(diǎn)(也稱為系統(tǒng)調(diào)用)請(qǐng)求內(nèi)核去執(zhí)行各種任務(wù)
  • 虛擬私有計(jì)算機(jī)
    • 每個(gè)用戶可以登錄進(jìn)入系統(tǒng)內(nèi)谒拴,獨(dú)立操作,運(yùn)行程序于自有的虛擬地址空間

內(nèi)核態(tài)和用戶態(tài)

現(xiàn)代處理器架構(gòu)一般允許CPU至少在兩種不同狀態(tài)下運(yùn)行:

  • 用戶態(tài)
  • 和心態(tài)

執(zhí)行硬件指令可使CPU在兩種狀態(tài)間來(lái)回切換涉波。與之對(duì)應(yīng)的虛擬內(nèi)存區(qū)域劃分(標(biāo)記)為用戶空間部分內(nèi)核空間部分英上。在用戶態(tài)下運(yùn)行時(shí),CPU只能訪問(wèn)被標(biāo)記為用戶空間的內(nèi)存啤覆,試圖訪問(wèn)內(nèi)核空間的內(nèi)存會(huì)引發(fā)硬件異常苍日。當(dāng)運(yùn)行于核心態(tài)時(shí),CPU既能訪問(wèn)用戶空間內(nèi)存窗声,也能訪問(wèn)內(nèi)核空間內(nèi)存相恃。

僅當(dāng)處理器在核心態(tài)才能執(zhí)行的操作:

  • 執(zhí)行宕機(jī)(halt)
  • 訪問(wèn)內(nèi)存管理硬件
  • 設(shè)計(jì)IO操作

以進(jìn)程及內(nèi)核視角檢視系統(tǒng)

內(nèi)核維護(hù)的數(shù)據(jù)結(jié)構(gòu)中,包含了所有正在運(yùn)行的進(jìn)程有關(guān)信息笨觅。隨著進(jìn)程的創(chuàng)建拦耐、狀態(tài)發(fā)生變化、終結(jié)见剩,內(nèi)核會(huì)及時(shí)更新這些數(shù)據(jù)結(jié)構(gòu)杀糯。

內(nèi)核所維護(hù)的底層數(shù)據(jù)結(jié)構(gòu)可將程序使用的文件名轉(zhuǎn)換為磁盤(pán)的物理位置。

每個(gè)進(jìn)程的虛擬內(nèi)存與計(jì)算機(jī)物理內(nèi)存及磁盤(pán)交換區(qū)(磁盤(pán)空間中的保留區(qū)域炮温,作為計(jì)算機(jī)RAM的補(bǔ)充)之間的映射關(guān)系火脉,也在內(nèi)核維護(hù)的數(shù)據(jù)結(jié)構(gòu)之列。

2.shell

shell是一種具有特殊用途的程序柒啤,主要用戶讀取喲京滬輸入命令,并執(zhí)行相應(yīng)的程序以響應(yīng)命令畸颅。有時(shí)担巩,也稱之為命令解釋器。

盡管某些操作系統(tǒng)將命令解釋器集成于內(nèi)核中没炒,而對(duì)UNIX系統(tǒng)而言涛癌,shell只是一個(gè)用戶進(jìn)程。

幾種shell:

  • Bourne shell(sh)
  • C shell(csh)
  • Korn shell(ksh)
  • Bourne again shell(bash)

3.用戶和組

系統(tǒng)會(huì)對(duì)每個(gè)用戶的身份做唯一標(biāo)識(shí)送火,用戶可隸屬于多個(gè)組拳话。

用戶

系統(tǒng)的每個(gè)用戶都擁有唯一的登錄名(用戶名)和與之對(duì)應(yīng)的整數(shù)型用戶ID(UID)。

系統(tǒng)密碼文件**/etc/passwd **中記錄的信息:

  • UID
  • 組ID
  • 主目錄:用戶登陸后所居于的初始目錄
  • 登陸shell

用戶密碼往往存儲(chǔ)于單獨(dú)的shadow密碼文件中

一個(gè)用戶可以同時(shí)屬于組种吸。

每個(gè)用戶對(duì)應(yīng)著系統(tǒng)組文件/etc/group中的一行記錄弃衍。含有如下記錄:

  • 組名
  • 組ID(GID)
  • 用戶列表

超級(jí)用戶

超級(jí)用戶賬號(hào)ID為0,通常登陸名為root坚俗。超級(jí)用戶凌駕于系統(tǒng)的權(quán)限檢查之上镜盯。無(wú)論文件何種訪問(wèn)權(quán)限岸裙,超級(jí)用戶都可以訪問(wèn)系統(tǒng)中的任何文件,也能發(fā)送信號(hào)干預(yù)系統(tǒng)運(yùn)行的所有用戶進(jìn)程速缆。

4.單根目錄層級(jí)降允、目錄、鏈接及文件

內(nèi)核維護(hù)著一套單根目錄結(jié)構(gòu)艺糜,以放置系統(tǒng)的所有文件剧董。"/" 根目錄。

文件類型

文件系統(tǒng)中破停,會(huì)對(duì)文件類型進(jìn)行標(biāo)記送滞,以表明其種類,含有如下種類:

  • 普通文件
  • 設(shè)備
  • 管道
  • 套接字
  • 目錄
  • 符號(hào)鏈接

路徑和鏈接

目錄是一種特殊類型的文件辱挥,內(nèi)容采用表格形式犁嗅,數(shù)據(jù)項(xiàng)包括文件名以及對(duì)相應(yīng)文件的引用。“文件名+引用”的組合被稱為鏈接晤碘,每個(gè)文件都可以有多條鏈接褂微,因而也可以有多個(gè)名稱,在相同或不同的目錄中出現(xiàn)园爷。

目錄可包含指向文件或其他目錄的鏈接宠蚂。

每個(gè)目錄至少包含兩條記錄:...,前者指向目錄自身的鏈接,后者指向其上級(jí)目錄的鏈接童社。

符號(hào)鏈接

類似普通鏈接求厕,符號(hào)鏈接給文件起了一個(gè)“別名”。

普通鏈接是文件名+指針的一條記錄扰楼,符號(hào)鏈接是經(jīng)過(guò)特殊標(biāo)記的文件呀癣。一般會(huì)說(shuō)符號(hào)鏈接“指向”或“引用”目標(biāo)文件,在多數(shù)情況下弦赖,只要系統(tǒng)調(diào)用用到了路徑名项栏,內(nèi)存會(huì)自動(dòng)解除該路徑中符號(hào)鏈接的引用,以符號(hào)鏈接所指向的文件名來(lái)替換符號(hào)鏈接蹬竖。

  • 硬鏈接:普通鏈接
  • 軟鏈接:符號(hào)鏈接

文件名

文件名最長(zhǎng)達(dá)255個(gè)字符

路徑名

  • 絕對(duì)路徑:以"/"開(kāi)始
  • 相對(duì)路徑

當(dāng)前工作目錄

每個(gè)進(jìn)程都有一個(gè)當(dāng)前工作目錄沼沈。

文件的所有權(quán)和權(quán)限

每個(gè)文件都有一個(gè)與之相關(guān)的用戶ID和組ID,分別定義文件的屬主和屬組币厕。

為了訪問(wèn)文件列另,系統(tǒng)把用戶分為3類:

  • 文件的屬主(文件的用戶)
  • 文件組ID相匹配的屬組成員用戶
  • 其他用戶

文件的3中權(quán)限:

  • 寫(xiě)
  • 執(zhí)行

也可針對(duì)目錄進(jìn)行上述權(quán)限設(shè)置,但意義稍有不同旦装。讀權(quán)限允許列出目錄內(nèi)容(即該目錄下的文件名)页衙,寫(xiě)權(quán)限允許對(duì)目錄內(nèi)容進(jìn)行更改(添加、修改同辣、刪除文件名)拷姿,執(zhí)行(搜索)權(quán)限允許對(duì)目錄中的文件進(jìn)行訪問(wèn)(但需受文件自身訪問(wèn)權(quán)限約束)

5.文件I/O模型

I/O通用性

同一套系統(tǒng)調(diào)用(open() read() write() close())所執(zhí)行的I/O操作惭载,可施之與所有文件類型,包括設(shè)備文件在內(nèi)响巢。

文件描述符

I/O系統(tǒng)調(diào)用使用文件描述符來(lái)指代打開(kāi)的文件描滔。獲取文件描述符常用手法就是調(diào)用open(),在參數(shù)中指定I/O操作目標(biāo)文件的路徑名踪古。

shell啟動(dòng)的進(jìn)程會(huì)繼承3個(gè)已打開(kāi)的文件描述符:

  • 描述符0為標(biāo)準(zhǔn)輸入含长,指代為進(jìn)程提供輸入的文件
  • 描述符1為標(biāo)準(zhǔn)輸出,指代進(jìn)程寫(xiě)入輸出的文件
  • 描述符2為標(biāo)準(zhǔn)錯(cuò)誤伏穆,指代供進(jìn)程寫(xiě)入錯(cuò)誤消息或異常通告的文件拘泞。

在stdio函數(shù)庫(kù)中,這幾種描述符分別與文件流stdin枕扫、stdout和stderr相對(duì)應(yīng)陪腌。

stdio函數(shù)庫(kù)

C語(yǔ)言的標(biāo)準(zhǔn)I/O函數(shù)

6.程序

過(guò)濾器

從stdin讀取輸入,加以轉(zhuǎn)換烟瞧,在輸出到stdout诗鸭,這種行為的程序稱為過(guò)濾器。

  • cat
  • grep
  • tr
  • sort
  • wc
  • sed
  • awk

命令行參數(shù)

C語(yǔ)言程序可以訪問(wèn)命令行參數(shù)参滴,即程序運(yùn)行時(shí)在命令行中輸入的內(nèi)容强岸,在程序main函數(shù)中訪問(wèn):

int main(int argc, char *argv[]])

argc變量包含命令行參數(shù)的總個(gè)數(shù),argv指針數(shù)組的成員逐一指向命令行參數(shù)字符串砾赔,首個(gè)字符串a(chǎn)rgv[0],標(biāo)識(shí)程序名本身蝌箍。

7.進(jìn)程

進(jìn)程就是正在執(zhí)行的程序?qū)嵗?zhí)行程序時(shí)暴心,內(nèi)核會(huì)將程序代碼載入虛擬內(nèi)存妓盲,為程序變量分配空間,簡(jiǎn)歷內(nèi)核記賬(bookkeepingn)數(shù)據(jù)結(jié)構(gòu)酷勺,以記錄與進(jìn)程有關(guān)的各種信息(進(jìn)程ID本橙、用戶ID、組ID以及終止?fàn)顟B(tài))脆诉。

進(jìn)程的內(nèi)存布局

邏輯上將一個(gè)進(jìn)程劃分為以下幾個(gè)部分(也稱為段):

  • 文本:程序的指令
  • 數(shù)據(jù):程序使用的靜態(tài)變量。
  • 堆:程序可以從該區(qū)域動(dòng)態(tài)分配額外內(nèi)存贷币。
  • 棧:隨函數(shù)調(diào)用击胜、返回而增減的一片內(nèi)存,用于為局部變量和函數(shù)調(diào)用鏈接信息分配存儲(chǔ)空間役纹。

創(chuàng)建進(jìn)程和執(zhí)行程序

進(jìn)程可以使用系統(tǒng)調(diào)用fork()來(lái)創(chuàng)建一個(gè)新進(jìn)程偶摔。調(diào)用fork()的進(jìn)程稱為父進(jìn)程,新創(chuàng)建的是子進(jìn)程促脉。內(nèi)核通過(guò)對(duì)父進(jìn)程的復(fù)制來(lái)創(chuàng)建子進(jìn)程辰斋。子進(jìn)程從父進(jìn)程處繼承數(shù)據(jù)段策州、棧段以及堆段的副本后,可以修改這些內(nèi)容宫仗,不糊影響父進(jìn)程的原版內(nèi)容够挂。在內(nèi)存中被標(biāo)記為只讀的程序文本段則由父子進(jìn)程共享。

使用execve()系統(tǒng)調(diào)用去加載并執(zhí)行一個(gè)全新程序藕夫。

進(jìn)程ID和父進(jìn)程ID

每一個(gè)進(jìn)程都有一個(gè)唯一的整數(shù)型進(jìn)程標(biāo)識(shí)符PID孽糖,一個(gè)父進(jìn)程標(biāo)識(shí)符PPID

進(jìn)程終止和終止?fàn)顟B(tài)

兩種方式:

  • 使用_exit()系統(tǒng)調(diào)用
  • 向進(jìn)程傳遞信號(hào),將其"殺死"

進(jìn)程終止毅贮,都會(huì)產(chǎn)生一個(gè)“終止?fàn)顟B(tài)”办悟,一個(gè)非負(fù)小整數(shù),可供父進(jìn)程的wait()系統(tǒng)調(diào)用檢測(cè)滩褥。終止?fàn)顟B(tài)為0表示進(jìn)程“正常退出”病蛉,非0則表示有錯(cuò)誤發(fā)生,大多數(shù)shell會(huì)將前一執(zhí)行程序的終止?fàn)顟B(tài)保存于shell變量$?

進(jìn)程的用戶和組標(biāo)識(shí)符(憑證)

每個(gè)進(jìn)程都有一組與之相關(guān)的UID和GID瑰煎。

  • 真實(shí)UID和GID:用來(lái)表示進(jìn)程所屬的用戶和組铺然。新進(jìn)程從父進(jìn)程繼承這些ID。
  • 有效UID和GID:進(jìn)程在訪問(wèn)受保護(hù)資源時(shí)丢间,會(huì)使用這兩個(gè)ID來(lái)確定訪問(wèn)權(quán)限探熔。一般情況,進(jìn)程的有效ID和相應(yīng)的真實(shí)ID值相同烘挫,改變進(jìn)程的有效ID實(shí)際上是一種機(jī)制诀艰,可使進(jìn)程具有其他用戶或組的權(quán)限。
  • 補(bǔ)充GID:用來(lái)標(biāo)識(shí)進(jìn)程所屬的額外組饮六。新進(jìn)程從父進(jìn)程繼承補(bǔ)充組ID其垄。登錄shell則從系統(tǒng)組文件中獲取其補(bǔ)充組ID

特權(quán)進(jìn)程

特權(quán)進(jìn)程是指有效用戶ID為0的進(jìn)程。通常由內(nèi)核所施加的權(quán)限限制對(duì)此類進(jìn)程無(wú)效卤橄。由某一特權(quán)進(jìn)程創(chuàng)建的進(jìn)程绿满,也可以是特權(quán)進(jìn)程。另一種方法是set-user-ID機(jī)制窟扑,該機(jī)制允許某進(jìn)程的有效用戶ID等同于該進(jìn)程所執(zhí)行程序文件的用戶ID

能力

Linux把傳統(tǒng)上賦予超級(jí)用戶的權(quán)限劃分為一組相互獨(dú)立的單元喇颁,稱為“能力”。傳統(tǒng)意義上的超級(jí)用戶進(jìn)程則相應(yīng)開(kāi)啟了所有能力嚎货。

賦予某進(jìn)程部分能力橘霎,使得其既能夠執(zhí)行某些特權(quán)級(jí)操作,又防止其執(zhí)行特權(quán)級(jí)操作殖属。

能力的命名以CAP_前綴姐叁,例如,CAP_KILL

init進(jìn)程

系統(tǒng)引導(dǎo)時(shí),內(nèi)核會(huì)創(chuàng)建一個(gè)名為init的特殊進(jìn)程外潜,所有進(jìn)程之父原环,該進(jìn)程的響應(yīng)程序文件為/sbin/init。系統(tǒng)的所有進(jìn)程不是由init(使用fork())創(chuàng)建处窥,就是由其后代創(chuàng)建嘱吗。init的進(jìn)程號(hào)總為1苗踪,且總是以超級(jí)用戶權(quán)限運(yùn)行檀何。

守護(hù)進(jìn)程

守護(hù)進(jìn)程值具有特殊用途的進(jìn)程,系統(tǒng)創(chuàng)建和處理此類進(jìn)程的方式與其他進(jìn)程相同悄蕾,但有一下獨(dú)有特征:

  • “長(zhǎng)生不老”嵌灰。守護(hù)進(jìn)程在系統(tǒng)引導(dǎo)時(shí)啟動(dòng)弄匕,直至系統(tǒng)關(guān)閉前,會(huì)一直健在沽瞭。
  • 守護(hù)進(jìn)程在后臺(tái)運(yùn)行迁匠,且無(wú)控制終端供其讀取或?qū)懭霐?shù)據(jù)。

例子驹溃,syslogd(在系統(tǒng)日志中記錄消息)httpd(利用HTTP分發(fā)Web頁(yè)面)

環(huán)境列表

每個(gè)進(jìn)程都有一份環(huán)境列表城丧,即在進(jìn)程用戶空間內(nèi)存中維護(hù)的一組環(huán)境變量。

使用export命令創(chuàng)建環(huán)境變量:

$ export MYVAR = 'Hello world'

C語(yǔ)言可使用外部變量(char environ)來(lái)訪問(wèn)環(huán)境豌鹤,而庫(kù)函數(shù)也允許進(jìn)程去獲取或修改自己環(huán)境中的值亡哄。

資源限制

系統(tǒng)調(diào)用setrlimit()進(jìn)程可以自己消耗的各類資源限制一個(gè)上限。

ulimit()可調(diào)整shell的資源限制布疙。shell為執(zhí)行命令所創(chuàng)建的子進(jìn)程會(huì)繼承上述資源設(shè)置蚊惯。

8.內(nèi)存映射

調(diào)用系統(tǒng)函數(shù)mmap()進(jìn)程,會(huì)在其虛擬地址空間中創(chuàng)建一個(gè)新的內(nèi)存映射灵临。

9.靜態(tài)庫(kù)和共享庫(kù)

目標(biāo)庫(kù):將(通常是邏輯相關(guān)的)一組函數(shù)代碼加以編譯截型,并置于一個(gè)文件中,供其他應(yīng)用程序調(diào)用儒溉。

  • 靜態(tài)庫(kù)
    • 要使用靜態(tài)庫(kù)中的函數(shù)宦焦,需要在創(chuàng)建程序的鏈接命令中指定相應(yīng)的庫(kù)。鏈接器在解析了引用情況后顿涣,會(huì)從庫(kù)中抽取需目標(biāo)模塊的副本波闹,將其賦值到最終可執(zhí)行的文件中,這就是所謂的靜態(tài)鏈接涛碑。
  • 共享庫(kù)
    • 運(yùn)行時(shí)將可執(zhí)行文件載入內(nèi)存舔痪,一款名為“動(dòng)態(tài)鏈接器”的程序會(huì)確保將可執(zhí)行文件所需的動(dòng)態(tài)庫(kù)找到,并載入內(nèi)存锌唾,隨后實(shí)施運(yùn)行時(shí)鏈接,解析可執(zhí)行文件中的函數(shù)調(diào)用,將其與共享庫(kù)中相應(yīng)的函數(shù)定義關(guān)聯(lián)起來(lái)晌涕。運(yùn)行時(shí)滋捶,共享代碼在內(nèi)存中只需保留一份。

10.進(jìn)程間通信及同步

進(jìn)程間通信機(jī)制(IPC):

  • 信號(hào)(signal)余黎,用來(lái)表示事件的發(fā)生重窟。
  • 管道(亦即shell操作"|")和FIFO,用于在進(jìn)程間傳遞數(shù)據(jù)惧财。
  • 套接字
  • 文件鎖定巡扇,為防止其他進(jìn)程讀取或更新文件內(nèi)容,允許某進(jìn)程對(duì)文件的部分區(qū)域加以鎖定垮衷。
  • 消息隊(duì)列厅翔,用于在進(jìn)程間交互消息(數(shù)據(jù)包)
  • 信號(hào)量(semaphore),用來(lái)同步進(jìn)程動(dòng)作
  • 共享內(nèi)存

11.信號(hào)

進(jìn)程收到信號(hào)搀突,意味著某一事件或異常情況發(fā)生刀闷。信號(hào)以SIGxxxx形式的符號(hào)名加以定義。

內(nèi)核仰迁、其他進(jìn)程或進(jìn)程自身均可向進(jìn)程發(fā)送信號(hào)甸昏。

以下情況可向進(jìn)程發(fā)送信號(hào):

  • 用戶鍵入中斷字符(Control-C)
  • 進(jìn)程的子進(jìn)程之一已經(jīng)終止
  • 由進(jìn)程設(shè)定的定時(shí)器(告警時(shí)鐘)已經(jīng)到期
  • 進(jìn)程嘗試訪問(wèn)無(wú)效的內(nèi)存地址

shell中kill命令,程序內(nèi)部系統(tǒng)調(diào)用kill()可提供相應(yīng)功能徐许。

收到信號(hào)時(shí)施蜜,進(jìn)程會(huì)根據(jù)信號(hào)采用如下動(dòng)作之一:

  • 忽略信號(hào)
  • 被信號(hào)“殺死”
  • 先掛起,之后再被專用信號(hào)喚醒

大多數(shù)信號(hào)類型雌隅,程序可不采用默認(rèn)的信號(hào)動(dòng)作翻默,信號(hào)處理器是有程序員定義的函數(shù),會(huì)在進(jìn)程收到信號(hào)時(shí)自動(dòng)調(diào)用澄步,根據(jù)信號(hào)的產(chǎn)生條件執(zhí)行相應(yīng)的動(dòng)作冰蘑。

信號(hào)從產(chǎn)生直至送達(dá)進(jìn)程期間,一直處于掛起狀態(tài)村缸。通常祠肥,系統(tǒng)會(huì)在接受進(jìn)程下次獲取調(diào)用時(shí),將處于掛起狀態(tài)的信號(hào)同時(shí)送達(dá)梯皿。程序可以將信號(hào)納入“信號(hào)屏蔽”仇箱,以阻塞該信號(hào),此信號(hào)一直保持掛起狀態(tài)东羹。

12.線程

每個(gè)進(jìn)程都可執(zhí)行多個(gè)線程剂桥。可將線程想象為共享同一虛擬內(nèi)存及一干其他屬性的進(jìn)程属提。

線程共享同一數(shù)據(jù)區(qū)域和堆权逗,但每個(gè)線程都有自己的棧美尸。線程之間可通過(guò)共享的全局變量進(jìn)行通信。

13.進(jìn)程組合shell任務(wù)控制

shell執(zhí)行的每個(gè)程序都會(huì)在一個(gè)新進(jìn)程內(nèi)發(fā)起斟薇。比如shell創(chuàng)建了3個(gè)進(jìn)程來(lái)執(zhí)行以下管道命令:

$ ls - l | sort -k5n | less

主流shell都提供了一種交互式特性师坎,名為任務(wù)控制,該特性允許用戶同時(shí)執(zhí)行并操縱多條命令或管道堪滨。在支持任務(wù)控制的shell中胯陋,會(huì)將管道內(nèi)的所有進(jìn)程置于一個(gè)新的進(jìn)程組或任務(wù)中。

內(nèi)核可以對(duì)進(jìn)程組中的所有成員執(zhí)行各種動(dòng)作袱箱,尤其是信號(hào)的傳遞遏乔。

14.會(huì)話、控制終端和控制進(jìn)程

會(huì)話指一組進(jìn)程組(任務(wù))发笔。會(huì)話中的所有進(jìn)程都具有相同的會(huì)話標(biāo)識(shí)符盟萨。會(huì)話首進(jìn)程是指創(chuàng)建會(huì)話的進(jìn)程,其進(jìn)程ID會(huì)成為會(huì)話ID

由shell創(chuàng)建的所有進(jìn)程組與shell自身隸屬于同一會(huì)話筐咧,shell是此會(huì)話的會(huì)話首進(jìn)程鸯旁。

偽終端

偽終端是一對(duì)相互連接的虛擬設(shè)備,也稱為主從設(shè)備量蕊。在這對(duì)設(shè)備之間铺罢,設(shè)有一條IPC信道,可供數(shù)據(jù)進(jìn)行雙向傳遞残炮。

日期和時(shí)間

進(jìn)程設(shè)計(jì)兩種類型時(shí)間:

  • 真實(shí)時(shí)間
  • 進(jìn)程時(shí)間:亦稱CPU時(shí)間韭赘,指的是進(jìn)程自啟動(dòng)起來(lái),所占用的CPU時(shí)間總量
    • 系統(tǒng)CPU時(shí)間:內(nèi)核模式執(zhí)行代碼所花費(fèi)的時(shí)間
    • 用戶CPU時(shí)間:用戶模式

time命令會(huì)顯示真實(shí)時(shí)間势就、系統(tǒng)CPU時(shí)間泉瞻、執(zhí)行管道中多個(gè)進(jìn)程花費(fèi)的CPU時(shí)間

客戶端服務(wù)端架構(gòu)

實(shí)時(shí)性

/proc文件系統(tǒng)

/proc文件系統(tǒng)由一組目錄和文件組成,裝配(mount)于/proc目錄下苞冯。/proc文件系統(tǒng)是中虛擬文件系統(tǒng)袖牙,以文件系統(tǒng)目錄和文件形式,提供一個(gè)指向內(nèi)核數(shù)據(jù)結(jié)構(gòu)舅锄。為查看和修改各種系統(tǒng)屬性提供方便鞭达。還可通過(guò)/prov/PID形式的命令目錄查看系統(tǒng)中運(yùn)行各進(jìn)程的相關(guān)信息。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末皇忿,一起剝皮案震驚了整個(gè)濱河市畴蹭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鳍烁,老刑警劉巖叨襟,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異幔荒,居然都是意外死亡糊闽,警方通過(guò)查閱死者的電腦和手機(jī)梳玫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)墓怀,“玉大人汽纠,你說(shuō)我怎么就攤上這事】模” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵莉炉,是天一觀的道長(zhǎng)钓账。 經(jīng)常有香客問(wèn)我,道長(zhǎng)絮宁,這世上最難降的妖魔是什么梆暮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮绍昂,結(jié)果婚禮上啦粹,老公的妹妹穿的比我還像新娘。我一直安慰自己窘游,他們只是感情好唠椭,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著忍饰,像睡著了一般贪嫂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上艾蓝,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天力崇,我揣著相機(jī)與錄音,去河邊找鬼赢织。 笑死亮靴,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的于置。 我是一名探鬼主播茧吊,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼俱两!你這毒婦竟也來(lái)了饱狂?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宪彩,失蹤者是張志新(化名)和其女友劉穎休讳,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體尿孔,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡俊柔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年筹麸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雏婶。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡物赶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出留晚,到底是詐尸還是另有隱情酵紫,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布错维,位于F島的核電站奖地,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏赋焕。R本人自食惡果不足惜参歹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望隆判。 院中可真熱鬧犬庇,春花似錦、人聲如沸侨嘀。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)飒炎。三九已至埋哟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間郎汪,已是汗流浹背赤赊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留煞赢,地道東北人抛计。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像照筑,于是被迫代替她去往敵國(guó)和親吹截。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容