《Linux基礎(chǔ)及應(yīng)用教程》課件第4章 進(jìn)程控制開發(fā)_第1頁
《Linux基礎(chǔ)及應(yīng)用教程》課件第4章 進(jìn)程控制開發(fā)_第2頁
《Linux基礎(chǔ)及應(yīng)用教程》課件第4章 進(jìn)程控制開發(fā)_第3頁
《Linux基礎(chǔ)及應(yīng)用教程》課件第4章 進(jìn)程控制開發(fā)_第4頁
《Linux基礎(chǔ)及應(yīng)用教程》課件第4章 進(jìn)程控制開發(fā)_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

4.1Linux下進(jìn)程概述4.1.1進(jìn)程的概念1.進(jìn)程的引入2.進(jìn)程及其特征(1)動(dòng)態(tài)性(2)并發(fā)性(3)獨(dú)立性(4)異步性(5)結(jié)構(gòu)特征:進(jìn)程由程序、數(shù)據(jù)和進(jìn)程控制塊三部分組成

3.進(jìn)程與程序的關(guān)系程序是指令的有序集合,其本身沒有任何運(yùn)行的含義,是一個(gè)靜態(tài)的概念。而進(jìn)程是程序在處理機(jī)上的一次執(zhí)行過程,它是一個(gè)動(dòng)態(tài)的概念。程序可以作為一種軟件資料長期存在,而進(jìn)程是有一定生命期的。程序是永久的,進(jìn)程是暫時(shí)的。

4.1.2進(jìn)程的結(jié)構(gòu)(1)進(jìn)程狀態(tài)(2)調(diào)度信息(3)標(biāo)識(shí)符(4)內(nèi)部進(jìn)程通信信息(5)鏈接信息

(6)時(shí)間和計(jì)時(shí)器(7)文件系統(tǒng)(8)虛擬內(nèi)存信息(9)處理器信息

4.2Linux進(jìn)程控制編程4.2.1進(jìn)程的創(chuàng)建方法:調(diào)用系統(tǒng)調(diào)用fork系統(tǒng)調(diào)用的語法格式:

pid=fork();

4.2.2進(jìn)程的等待pid_twait(int*stat_loc)

;pid_twaitpid(pid_tpid,int*stat_loc,intoptions)

;

wait系統(tǒng)調(diào)用會(huì)使父進(jìn)程阻塞直到一個(gè)子進(jìn)程結(jié)束。如果沒有父進(jìn)程,沒有子進(jìn)程或者其子進(jìn)程已經(jīng)結(jié)束,wait會(huì)立即返回。成功時(shí)wait將返回子進(jìn)程的ID,否則返回-1,并設(shè)置全局變量errno.stat_loc是子進(jìn)程的退出狀態(tài)。

4.2.3進(jìn)程的終止核心為系統(tǒng)調(diào)用exit完成下列操作:(1)撤銷所有的信號(hào)量(2)釋放其所有的資源,包括存儲(chǔ)空間、已打開文件、工作目錄、信號(hào)處理表等。(3)把進(jìn)程狀態(tài)置為“終止態(tài)”(4)向其父進(jìn)程發(fā)送子進(jìn)程終止的信號(hào)。(5)執(zhí)行相應(yīng)的進(jìn)程調(diào)度。

4.2.4進(jìn)程映像的更換核心為系統(tǒng)調(diào)用exec完成下列操作:(1)驗(yàn)證文件的可執(zhí)行性,即用戶有權(quán)執(zhí)行它。(2)讀文件頭,檢查它是一個(gè)可裝入模塊。(3)釋放原有的內(nèi)存空間。(4)按照可執(zhí)行文件的要求分配新的內(nèi)存空間,并裝入內(nèi)存。

4.3Linux守護(hù)進(jìn)程守護(hù)進(jìn)程(Daemon)是運(yùn)行在后臺(tái)的一種特殊進(jìn)程。它獨(dú)立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。守護(hù)進(jìn)程是一種很有用的進(jìn)程。Linux的大多數(shù)服務(wù)器就是用守護(hù)進(jìn)程實(shí)現(xiàn)的。

4.3.1守護(hù)進(jìn)程及其特性守護(hù)進(jìn)程最重要的特性是后臺(tái)運(yùn)行。在這一點(diǎn)上DOS下的常駐內(nèi)存程序TSR與之相似。守護(hù)進(jìn)程必須與其運(yùn)行前的環(huán)境隔離開來。

4.3.2守護(hù)進(jìn)程的編程要點(diǎn)(1)在后臺(tái)運(yùn)行。(2)脫離控制終端、登錄會(huì)話和進(jìn)程組(3)禁止進(jìn)程重新打開控制終端(4)關(guān)閉打開的文件描述符(5)改變當(dāng)前工作目錄(6)重設(shè)文件創(chuàng)建掩模(7)處理SIGCHLD信號(hào)

4.4Linux內(nèi)核簡(jiǎn)介Linux內(nèi)核的主要用途就是為了與計(jì)算機(jī)硬件進(jìn)行交互,實(shí)現(xiàn)對(duì)硬件部件的編程控制和接口操作,調(diào)度對(duì)硬件資源的訪問,并為計(jì)算機(jī)上的用戶程序提供一個(gè)高級(jí)的執(zhí)行環(huán)境和對(duì)硬件的虛擬接口。Linux內(nèi)核主要由5個(gè)模塊構(gòu)成,它們分別是:進(jìn)程調(diào)度模塊、內(nèi)存管理模塊、文件系統(tǒng)模塊、進(jìn)程間通信模塊和網(wǎng)絡(luò)接口模塊。

4.5shell基本工作原理及編程Linux系統(tǒng)的shell作為操作系統(tǒng)的外殼,為用戶提供使用操作系統(tǒng)的接口。它是用戶和Linux內(nèi)核之間的接口程序。shell是一個(gè)命令語言解釋器,類似于DOS下的程序,它擁有自己內(nèi)建的shell命令集,shell也能被系統(tǒng)中其他應(yīng)用程序所調(diào)用。

shell有很多種,如:csh,tcsh,pdksh,ash,sash,zsh,bash等。Linux的缺省shell為bash(BourneAgainshell)。用戶如何知道安裝的Linux版本支持哪些shell?在提示符下輸入:

cat/etc/shells如果用戶想知道自己現(xiàn)在使用的是哪種shell,可以在提示符后輸入:

echo$SHELL

4.5.1shell的基本工作原理(1)讀取用戶由鍵盤輸入的命令行。(2)分析命令,以命令名作為文件名,并將其它參數(shù)改造為系統(tǒng)調(diào)用execve()內(nèi)部處理所要求的形式。(3)終端進(jìn)程調(diào)用fork()建立一個(gè)子進(jìn)程。(4)終端進(jìn)程本身用系統(tǒng)調(diào)用wait4()來等待子進(jìn)程完成(如果是后臺(tái)命令,則不等待)。

(5)如果命令末尾有&號(hào)(后臺(tái)命令符號(hào)),則終端進(jìn)程不用系統(tǒng)調(diào)用wait4()等待,立即發(fā)提示符,讓用戶輸入下一個(gè)命令,轉(zhuǎn)⑴。如果命令末尾沒有&號(hào),則終端進(jìn)程要一直等待,當(dāng)子進(jìn)程(即運(yùn)行命令的進(jìn)程)完成處理后終止,向父進(jìn)程(終端進(jìn)程)報(bào)告,此時(shí)終端進(jìn)程醒來,在做必要的判別等工作后,終端進(jìn)程發(fā)提示符,讓用戶輸入新的命令,重復(fù)上述處理過程。

4.5.2創(chuàng)建和執(zhí)行shell腳本

1.創(chuàng)建shell腳本

shell腳本是使用用戶環(huán)境shell提供的語句所編寫的命令文件。用戶可以用任何編輯器來編寫shell腳本。因?yàn)閟hell腳本是解釋執(zhí)行的,所以不需要編譯成目標(biāo)文件。

2.執(zhí)行shell腳本執(zhí)行shell腳本的方式基本上有三種:(1)輸入定向到shell腳本利用輸入重定向,使shell命令解釋程序的輸入取自指定的文件。一般形式是:$bash<腳本名例如:$bash<hellotestshell從文件hellotest中讀取命令行,并執(zhí)行它們。當(dāng)shell到達(dá)文件末尾時(shí)就終止執(zhí)行,并把控制返回到shell命令狀態(tài)。要注意的是,這種執(zhí)行方式腳本名后面不能帶參數(shù)。(2)以腳本名作為參數(shù)其一般形式是:$bash腳本名[參數(shù)]例如:$bashiftestmorn其執(zhí)行過程與上一種方式一樣,但這種方式能在腳本名后面帶參數(shù),從而將參數(shù)值傳遞給程序中的命令。(3)用chmod命令使shell腳本權(quán)限設(shè)置為可執(zhí)行的

4.5.3shell變量1.用戶變量用戶變量是最常用的變量,使用也十分簡(jiǎn)單。變量名必須是以字母和下劃線開頭的字母、數(shù)字及下劃線序列組成,并且變量名是大小寫敏感的。用戶變量的賦值很簡(jiǎn)單,一般形式為:變量名=字符串/數(shù)字

2.系統(tǒng)變量系統(tǒng)變量是Linux所提供的一種特殊類型的變量,shell常用的系統(tǒng)變量并不多,但卻十分有用,特別是在做一些參數(shù)檢測(cè)的時(shí)候。

3.環(huán)境變量shell環(huán)境變量是所有shell程序都會(huì)接受的參數(shù)。shell程序運(yùn)行時(shí),都會(huì)接收一組變量,這組變量就是環(huán)境變量。常用的shell環(huán)境變量有:(1)HOME用于保存注冊(cè)目錄的全路徑名。(2)PATH用于保存用冒號(hào)分隔的目錄路徑名。(3)UID當(dāng)前用戶的識(shí)別字,取值是由數(shù)位構(gòu)成的字串。(4)PWD當(dāng)前工作目錄的絕對(duì)路徑名,該變量的取值隨cd命令的使用而變化。(5)PS1主提示符,在特權(quán)用戶下,默認(rèn)的主提示符是#,在普通用戶下,默認(rèn)的主提示符是$。(6)PS2在shell接收用戶輸入命令的過程中,如果用戶在輸入行的末尾輸入“\”然后回車,或者當(dāng)用戶按回車鍵時(shí)shell判斷出用戶輸入的命令沒有結(jié)束時(shí),就顯示這個(gè)輔助提示符,提示用戶繼續(xù)輸入命令的其余部分,默認(rèn)的輔助提示符是>。(7)TERM用戶終端的類型。

4.位置參數(shù)位置參數(shù)是一種在調(diào)用shell程序的命令行中按照各自的位置決定的變量,是在程序名之后輸入的參數(shù)。位置參數(shù)之間用空格分隔,shell取第一個(gè)位置參數(shù)替換程序文件中的$1,第二個(gè)替換$2,依次類推。$0是一個(gè)特殊的變量,它的內(nèi)容是當(dāng)前這個(gè)shell程序的文件名,所以,$0不是一個(gè)位置參數(shù),在顯示當(dāng)前所有的位置參數(shù)時(shí)是不包括$0的。

4.5.4shell的特性1.通配符和命令補(bǔ)齊功能通配符(wildcards)是轉(zhuǎn)義字符的子集,下表給出了通配符的含義:

2.輸入輸出重定向系統(tǒng)定義三個(gè)標(biāo)準(zhǔn)文件:標(biāo)準(zhǔn)輸入(stdin)、標(biāo)準(zhǔn)輸出(stdout)、標(biāo)準(zhǔn)錯(cuò)誤輸入(stderr)。(1)注釋和管道符注釋:在shell腳本中,以“#”開頭的正文行表示注釋。特別的是,第一行以“#!”開頭,表示腳本所使用的shell的絕對(duì)路徑。例:#!/bin/bash

#Thisscriptisatest!管道線:將一個(gè)命令的輸出連接到另一個(gè)命令的輸入。例:ls|sort

(2)過濾器(filters):用來接收標(biāo)準(zhǔn)輸入,經(jīng)過一定的轉(zhuǎn)化,再寫到標(biāo)準(zhǔn)輸出。所以,過濾器一般放在管道符中間。常用的過濾器如下:expand,sed,awk,fmt,tac,tr,grep,nl,pr。

重定向用來改變程序運(yùn)行的輸入來源和輸出地點(diǎn)。我們可以通過重定向?qū)⒊绦虻妮斎攵ㄏ虻侥硞€(gè)指定的文件,或者將程序的輸出結(jié)果定向到某個(gè)指定的文件。①輸出重定向命令>文件名:將命令執(zhí)行結(jié)果送到指定的文件,而不在屏幕上顯示。如果指定的文件不存在,則新建這一文件;如果指定文件存在,則原來的內(nèi)容被覆蓋。命令>>文件名:在進(jìn)行重定向時(shí),只是追加到已有的文件之后,該文件原有的內(nèi)容不被破壞。

②輸入重定向命令<文件名:把命令的標(biāo)準(zhǔn)輸入重新定向到指定文件。命令<<文件名:here文檔,也稱即時(shí)文檔。當(dāng)前命令的標(biāo)準(zhǔn)輸入來自命令行中一對(duì)分隔符之間的正文。

3.命令換行符多條命令可以輸入到一行中,并用“;”字符分隔。在一行命令后加“\”表示另起一行繼續(xù)輸入,下一行的提示符變?yōu)椤?gt;”,繼續(xù)輸入命令,按回車結(jié)束。

4.別名使用alias命令,可以定義一些別名。例:#alias‘rm–f’rm

5.更改登錄用戶命令su的意思是“substituteusers”(代替用戶),它允許用戶暫時(shí)以其他用戶身份登錄。

6.特殊字符雙引號(hào)由雙引號(hào)括起來的字符,除$(用來訪問變量的值),`(命令替換),\(轉(zhuǎn)義字符)保留其特殊功能外,其余的字符都作為普通字符處理。單引號(hào)用單引號(hào)括起來的字符都作為普通字符出現(xiàn)。倒引號(hào)用倒引號(hào)括起來的字符串被shell解釋為命令行。在執(zhí)行的時(shí)候,shell會(huì)先執(zhí)行該命令行,并以它的標(biāo)準(zhǔn)輸出結(jié)果取代整個(gè)倒引號(hào)部分。反斜杠轉(zhuǎn)義字符(metacharacters),即把特殊字符變成普通字符。

4.5.5控制結(jié)構(gòu)1.測(cè)試語句shell中進(jìn)行條件測(cè)試用test命令,test命令的語法如下:test條件表達(dá)式或者

[條件表達(dá)式]test命令可以進(jìn)行數(shù)值測(cè)試、字符串測(cè)試、文件測(cè)試和邏輯操作符等的測(cè)試

2.條件語句(1)if語句if語句用于條件控制結(jié)構(gòu)中,其一般格式為:if測(cè)試條件

then

命令1else

命令2fi

(2)case語句case語句允許進(jìn)行多重條件選擇。其一般語法形式是:case字符串in模式字符串1)命令…命令;;模式字符串2)命令…命令;;…模式字符串n)命令…命令;;*)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論