Linux程序開(kāi)發(fā)環(huán)境:Linux內(nèi)核之進(jìn)程和文件共享_第1頁(yè)
Linux程序開(kāi)發(fā)環(huán)境:Linux內(nèi)核之進(jìn)程和文件共享_第2頁(yè)
Linux程序開(kāi)發(fā)環(huán)境:Linux內(nèi)核之進(jìn)程和文件共享_第3頁(yè)
Linux程序開(kāi)發(fā)環(huán)境:Linux內(nèi)核之進(jìn)程和文件共享_第4頁(yè)
Linux程序開(kāi)發(fā)環(huán)境:Linux內(nèi)核之進(jìn)程和文件共享_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Linux程序設(shè)計(jì)環(huán)境CH06Linux內(nèi)核之進(jìn)程和文件共享內(nèi)容回顧-1Shell腳本編程入門注釋的含義test命令幾個(gè)經(jīng)典范例參數(shù)$#,$@,$0,$1… 內(nèi)容回顧-2判斷、循環(huán)、函數(shù)if-thencase-esacwhilefor函數(shù)function本章內(nèi)容Linux內(nèi)核中進(jìn)程的基本概念進(jìn)程管理作業(yè)管理Linux內(nèi)核中的文件機(jī)制硬鏈接和符號(hào)鏈接進(jìn)程的基本概念Onatimesharing(分時(shí))systemwithonlyoneCPU: Multipleprocessesareexecutedsimultaneously(并發(fā))byquicklyswitchingtheCPUfromoneprocesstoanotherTheshortCPUtime,thatisgiventoaprocessiscalledaquantum時(shí)間片(100msec)ThetechniqueusedbythekerneltochoosethenextprocessthatgetstheCPUiscalledCPUscheduling(cpu調(diào)度)CPUschedulingisimplementedinthekernel(內(nèi)核)進(jìn)程的基本概念CPUschedulingonatimesharingsystem:Apriorityvalue(優(yōu)先數(shù))isassignedtoeveryprocessTheprocesswiththehighestprioritytakestheCPUnextThesimplestschedulingalgorithmiscalledfirst-come-first-served(FCFS)AnotheralgorithmassignshighestprioritytotheI/OBoundprocesses(ProcessesthatspendmostoftheirtimedoingI/O.Ex:vieditor)RoundRobin(RR)AprocessgetstousetheCPUforonequantumandthentheCPUisgiventoanotherprocess,thenextprocessinthequeueofprocesseswaitingtousetheCPULinuxusesacombinationofthesealgorithms進(jìn)程的基本概念

LINUX進(jìn)程可以處于多種狀態(tài)中的一種。進(jìn)程可以從一種狀態(tài)轉(zhuǎn)變?yōu)榱硪环N狀態(tài),直到執(zhí)行結(jié)束(正?;蛘叻钦=K止)并退出系統(tǒng)。當(dāng)進(jìn)程完成它的工作并正常退出系統(tǒng),進(jìn)程就是正常終止。當(dāng)進(jìn)程是因?yàn)樵诋惓#ㄥe(cuò)誤)條件下退出系統(tǒng)或者在其擁有者或特權(quán)用戶的干涉下退出系統(tǒng),它便是非正常終止。Linux2.4進(jìn)程有5種狀態(tài);Linux2.6進(jìn)程有7種狀態(tài)。Linux進(jìn)程狀態(tài)Linux進(jìn)程狀態(tài)

TASK_RUNNING:進(jìn)程在運(yùn)行(是系統(tǒng)的當(dāng)前進(jìn)程)或者準(zhǔn)備運(yùn)行(等待被安排到系統(tǒng)的一個(gè)CPU上)。進(jìn)程控制塊有一個(gè)run_list成員,所有處于TASK_RUNNING狀態(tài)的進(jìn)程都通過(guò)該成員鏈在一起,稱之為可運(yùn)行隊(duì)列。

TASK_INTERRUPTIBLE:進(jìn)程處于某個(gè)等待隊(duì)列中,它能夠被信號(hào)(signal)或中斷喚醒。等待資源的請(qǐng)求滿足時(shí),也被喚醒。

TASK_UNINTERRUPTIBLE:進(jìn)程處于某個(gè)等待隊(duì)列中,不能被信號(hào)或中斷喚醒,只有等待的資源被滿足時(shí)才被喚醒。例如當(dāng)進(jìn)程打開(kāi)一個(gè)設(shè)備文件時(shí),使用TASK_UNINTERRUPTIBLE

TASK_ZOMBIE:進(jìn)程已經(jīng)停止,但還沒(méi)有釋放進(jìn)程控制塊

TASK_STOPPED:可能是被特定的信號(hào)終止,也可能是受其它進(jìn)程的跟蹤調(diào)用而暫時(shí)將CPU交給跟蹤它的進(jìn)程。TASK_TRACED(2.6)TASK_DEAD(2.6)Shell命令的執(zhí)行和進(jìn)程

Shell命令可以是內(nèi)部或者外部命令。

內(nèi)部(內(nèi)置)命令(internal(built-in)command)的代碼本身就是shell進(jìn)程的一部分。LINUXshell中的一些內(nèi)部命令如.(點(diǎn)命令)、alias、bg、cd、continue、echo、exec、exit、fg、jobs、pwd、set、shift、test、time、umask、unset和wait。外部命令是(externalcommand)命令代碼以文件的形式出現(xiàn)的稱為;文件內(nèi)容可以是二進(jìn)制代碼或者shell腳本。通常使用的一些外部命令如grep、more、cat、mkdir、rmdir、ls、sort、ftp、telnet、lp和ps。

LINUX進(jìn)程通過(guò)系統(tǒng)調(diào)用fork創(chuàng)建另外一個(gè)進(jìn)程,該操作建立原進(jìn)程內(nèi)存的完全拷貝。這兩個(gè)進(jìn)程接著fork后的語(yǔ)句執(zhí)行。Theforkingprocessisknownastheparentprocess(父進(jìn)程)

Thecreated(forked)processiscalledthe

childprocess(子進(jìn)程)Shell命令的執(zhí)行和進(jìn)程bashshell創(chuàng)建一個(gè)進(jìn)程Shell命令的執(zhí)行和進(jìn)程為了執(zhí)行一個(gè)外部二進(jìn)制命令,需要一種機(jī)制使子進(jìn)程成為要執(zhí)行的命令

LINUX系統(tǒng)調(diào)用exec完成這項(xiàng)工作,進(jìn)程可以用另外一個(gè)命令的可執(zhí)行代碼來(lái)覆蓋自身。

shell先后使用fork和exec系統(tǒng)調(diào)用來(lái)執(zhí)行一個(gè)外部二進(jìn)制命令。Shell命令的執(zhí)行和進(jìn)程Shell命令的執(zhí)行和進(jìn)程shell腳本的執(zhí)行同二進(jìn)制文件的執(zhí)行略有不同。

Shell腳本的執(zhí)行:

當(dāng)前shell創(chuàng)建一個(gè)子shell并讓子shell依次執(zhí)行shell腳本中的命令,腳本中每一個(gè)命令的執(zhí)行與從鍵盤輸入的命令采用相同的方式子shell為每一個(gè)要執(zhí)行的命令創(chuàng)建一個(gè)子進(jìn)程。子shell執(zhí)行腳本文件中的命令時(shí),父shell等待子shell結(jié)束。當(dāng)子shell遇到腳本文件的結(jié)束標(biāo)志,它就終止。子shell的唯一目的是執(zhí)行命令,eof意味著沒(méi)有其它的命令了。當(dāng)子shell終止,父shell結(jié)束等待狀態(tài),開(kāi)始重新執(zhí)行。Shell命令的執(zhí)行和進(jìn)程Linux進(jìn)程屬性進(jìn)程包含以下屬性:OwnersIDProcessnameProcessID(PID)ProcessstateParentprocessIDLenghtoftimetheprocesshasbeenrunning進(jìn)程已執(zhí)行的時(shí)間Linux進(jìn)程屬性ps命令用來(lái)查看系統(tǒng)中運(yùn)行的進(jìn)程的各種屬性Linux進(jìn)程屬性使用范例Linux進(jìn)程屬性進(jìn)程管理

top命令:實(shí)時(shí)監(jiān)視CPU的活動(dòng)狀態(tài)。該命令顯示系統(tǒng)中CPU密集型任務(wù)的狀態(tài)并且允許你交互地控制這些進(jìn)程。該命令按照CPU使用情況、內(nèi)存使用情況和執(zhí)行時(shí)間對(duì)進(jìn)程進(jìn)行排序。top命令執(zhí)行時(shí),可以用各種命令與之交互。當(dāng)使用交互命令時(shí),top提示你一個(gè)或者多個(gè)與它要完成的工作有關(guān)的問(wèn)題。

kill命令:終止指定PID的進(jìn)程。進(jìn)程管理使用范例作業(yè)管理當(dāng)鍵入命令并敲<Enter>后,shell執(zhí)行命令在當(dāng)前命令執(zhí)行結(jié)束即shell返回前,你不能執(zhí)行任何命令。這種執(zhí)行命令的方式,稱之為在前臺(tái)foreground執(zhí)行需要運(yùn)行一個(gè)要花費(fèi)很長(zhǎng)時(shí)間才能完成的LINUX命令(或者任一這樣的程序),當(dāng)命令執(zhí)行時(shí),你無(wú)法做其它工作。

LINUX可以在執(zhí)行命令的同時(shí)做其他工作。這種能力稱為在后臺(tái)background執(zhí)行命令。

作業(yè)管理在命令后面加上一個(gè)“與”操作符號(hào)(&),使該命令在后臺(tái)操作。當(dāng)一個(gè)任務(wù)在后臺(tái)運(yùn)行時(shí):前端shell命令行繼續(xù)工作

可以繼續(xù)執(zhí)行其他shell命令作業(yè)管理允許用戶執(zhí)行一個(gè)命令而不需要等待前一個(gè)命令的完成。作業(yè)管理Example:$find/-namefoo–print>foo.paths2>/dev/null& [1]23467括號(hào)中shell返回的數(shù)字是該進(jìn)程的作業(yè)號(hào)(jobnumber);另外一個(gè)數(shù)字是進(jìn)程PID。

find命令的作業(yè)號(hào)是1,其PID為23467。

作業(yè)是一個(gè)不運(yùn)行于前臺(tái)的進(jìn)程,并且只能在關(guān)聯(lián)的終端上訪問(wèn)。這樣的進(jìn)程通常在后臺(tái)執(zhí)行或者成為被掛起的進(jìn)程。作業(yè)管理fg命令可以使后臺(tái)進(jìn)程轉(zhuǎn)到前臺(tái)作業(yè)管理使用<Ctrl-Z>掛起一個(gè)前臺(tái)進(jìn)程。使用bg命令把被掛起的進(jìn)程轉(zhuǎn)到后臺(tái)。使用jobs命令顯示所有掛起的(停止的)和后臺(tái)進(jìn)程的作業(yè)號(hào),確定哪一個(gè)是當(dāng)前的進(jìn)程。

命令suspend可以掛起當(dāng)前shell進(jìn)程作業(yè)管理范例作業(yè)管理范例作業(yè)管理范例命令和進(jìn)程的終止按<Ctrl-C>來(lái)終止一個(gè)前臺(tái)進(jìn)程。終止后臺(tái)進(jìn)程可用兩種方法中的一種:使用kill命令先使用fg命令把進(jìn)程轉(zhuǎn)向前臺(tái),然后按<Ctrl-C>。kill命令的主要目的是向進(jìn)程發(fā)送信號(hào)(也稱為軟中斷)。進(jìn)程接收到信號(hào)后,可以采取以下三種行為之一:接受內(nèi)核規(guī)定的默認(rèn)動(dòng)作忽略該信號(hào)截獲該信號(hào)并且執(zhí)行用戶定義的動(dòng)作命令和進(jìn)程的終止為了終止一個(gè)忽略15號(hào)信號(hào)或者其它信號(hào)的進(jìn)程,需要使用9號(hào)信號(hào),即強(qiáng)制終止信號(hào)

進(jìn)程號(hào)0可以指代所有在當(dāng)前登錄期間創(chuàng)建的進(jìn)程。因此kill–90命令可以終止所有登錄時(shí)產(chǎn)生的進(jìn)程(即,當(dāng)前會(huì)話中的所有進(jìn)程),這樣,你自己就不得不退出系統(tǒng)。

Linux進(jìn)程的層次關(guān)系Linux啟動(dòng)進(jìn)程創(chuàng)建過(guò)程Linux進(jìn)程的層次關(guān)系

ps–ef命令或者pstree命令可以用圖的形式顯示當(dāng)前系統(tǒng)中執(zhí)行進(jìn)程的進(jìn)程樹(shù),勾勒出進(jìn)程間的父子關(guān)系。

$pstree–a|more

Bashshell下可以用ulimit顯示用戶可以同時(shí)執(zhí)行的最大進(jìn)程個(gè)數(shù)$ulimit–u 4071#fedoracore4在TCshell下完成同樣任務(wù)的命令是limit命令。

Linux文件共享方法通過(guò)副本共享:復(fù)制需要共享的文件并分發(fā)到組內(nèi)每個(gè)成員

通過(guò)同一用戶名登錄共享:共用一個(gè)賬號(hào)登錄系統(tǒng)。

為共享文件設(shè)立適當(dāng)?shù)脑L問(wèn)權(quán)限:把所有要共享的文件放到一個(gè)成員帳號(hào)下,設(shè)置組成員具有讀寫和執(zhí)行的權(quán)限

為團(tuán)隊(duì)成員建立一個(gè)用戶組建立一個(gè)新用戶組只包括項(xiàng)目組的所有成員,每個(gè)用戶用自己的賬號(hào)登錄,為自己的文件設(shè)立適當(dāng)?shù)脑L問(wèn)權(quán)限,使得它們可以被組中的其他成員訪問(wèn)。

通過(guò)文件鏈接共享,Linux兩類鏈接:

硬鏈接(hardlink)軟(符號(hào))鏈接(Soft/symboliclink)通過(guò)文件鏈接共享ln命令用來(lái)建立硬鏈接和符號(hào)鏈接。

語(yǔ)法:

ln[options]existing-filenew-file ln[options]existing-file-listdirectory 常用選項(xiàng): -f強(qiáng)迫建立鏈接 -n

如果“new-file”已存在,不創(chuàng)建鏈接。

-s建立一個(gè)符號(hào)鏈接而不是硬鏈接 -d建立目錄的硬鏈接 例:

$lnChapter3Chapter3.hard硬鏈接硬鏈接是一個(gè)指向文件索引節(jié)點(diǎn)的指針。

ln并不會(huì)影響文件的內(nèi)容,它只是建立另一個(gè)文件名稱而已

例:$ls-iltest12513974-rw-r--r--1rootroot556Jul1221:06test1$lntest1

test2$ls-iltest*2513974-rw-r--r--2rootroot556Jul1221:06test12513974-rw-r--r--2rootroot556Jul1221:06test2

建立新鏈接$lntest1test2

$cattest1WelcometoLinuxWorld$cattest2WelcometoLinuxWo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論