Linux操作系統(tǒng)實訓unit6課案_第1頁
Linux操作系統(tǒng)實訓unit6課案_第2頁
Linux操作系統(tǒng)實訓unit6課案_第3頁
Linux操作系統(tǒng)實訓unit6課案_第4頁
Linux操作系統(tǒng)實訓unit6課案_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Unit6實習報告:Linux下并發(fā)程序設(shè)計1、完成操作系統(tǒng)原理實驗教材中“3.4管理Linux系統(tǒng)進程”實驗內(nèi)容(P70-77)步驟1 :登錄進入GNOME。在Linux登錄框中填寫指導老師分配的用戶名和口令,登錄Linux系統(tǒng)。步驟2 :訪問命令行。單擊紅帽子,在“ GNOME幫助”菜單中單擊“系統(tǒng)工具” -“終端”命令,打開“終端” 窗口。步驟3 :回顧系統(tǒng)進程概念。每個運行的程序都會創(chuàng)建一個進程,進程分配到一個唯一的進程標識符(PID)。PID被系統(tǒng)用于標識和跟蹤進程,直到進程結(jié)束。操作系統(tǒng)內(nèi)核管理所有進程的初始化和終止。每一個進程都要求系統(tǒng)資源(例如CPU時間和RAM空間)在其中工作

2、。當進程啟動的時候,操作系統(tǒng)把系統(tǒng)資源分配給每個進程,當進程終止的時候,系統(tǒng)回收這些資源。在Linux系統(tǒng)啟動的時候,首先啟動的兩個進程是 sched (調(diào)度)和init (初始化),它們管理著其他進程。 Linux系統(tǒng)中有幾種不同類型的進程:守護進程:由Linux內(nèi)核啟動的進程,為了特定目的而存在。例如, Ipsched守護進程存 在只是為了處理打印作業(yè)。父進程:派生其他進程的進程是父進程。一個叫做in it的守護進程是第一個調(diào)用的進程。 每一個進程,除了 in it之外,都有一個父進程。子進程:由其他進程派生出來的進程叫做子進程。孤兒進程:在進程返回輸出之前,它的父進程結(jié)束了,這樣的進程叫

3、做孤兒進程。僵進程:子進程沒有帶著輸出返回給父進程。這樣的進程在系統(tǒng)中變成丟失的進程。使用此前的信息,完成以下填空:1)Linux系統(tǒng)中,幾乎每一個啟動的進程,都會由內(nèi)核分配一個唯一的PID進程標識符,用于跟蹤從講程啟動到講程結(jié)束。2)當啟動新進程的時候,內(nèi)核也給它們分配系統(tǒng)資源,如_sched和init_ 。3)永遠不向父進程返回輸出的進程叫做僵進程。4)由父進程派生出來的進程叫做 _子進程。5)父進程是一個派生另一個進程的進程。6)運行用于提供服務(wù)的Linux系統(tǒng)進程是守護進程。7)如果父進程在子進程之前結(jié)束,它創(chuàng)建了一個孤兒進程。步驟4 :回顧ps命令和信息。ps命令用于列出當前系統(tǒng)中運

4、行的進程。如果一個進程耗時太長,或者看上去好像已經(jīng)終止了,表現(xiàn)為一個終端窗口不再響應(yīng)或掛起,通常需要使用 ps查看系統(tǒng)中的進程。通過列出進程,可以查看初始化進程的命令或 程序的名字,以及所有它派生出來的子進程。通過多次執(zhí)行ps命令,查看進程的時間一一進程占用的 CPU時間,可以檢查一個進程是否還在運行。如果時間小再增長,那么進程可 能已經(jīng)終止了。如果進程占用太長的時間或者已經(jīng)停止,可以使用ps命令檢查進程的進程ID (PID),然后殺死進程。ps命令的輸出將顯示 PID號和與其相關(guān)的命令或程序。PID號通常用于終止一個進程。ps命令(ps -options)的3個主要選項如下表所示。表3-5

5、ps 命令選項ps選項意義功能Ps無選項顯示當前shell或終端窗口中,當前用戶的講程信息ps -e每一個顯示系統(tǒng)中每一個講程的信息ps -完全產(chǎn)生一個完全列表,給岀每個講程的所有可用信息ps -u userid用戶顯示特定用戶的所有講程基本的ps命令顯示在當前shell中的進程信息,用戶只能夠查看在這個終端窗口中初始 化的進程。輸入ps命令,將結(jié)果填入表 3-6中。表3-6實驗記錄PIDTTYTIMECMD3840pts/000:00:00bash3864pts/000:00:00ps從當前終端窗口中,練習使用給出的每個選項的ps命令。輸入ps -f命令,顯示運行在系統(tǒng)中的某個進程的完全信息

6、,填入表 3-7中。表3-7實驗記錄UIDPIDPPIDCSTIMETTYTIMECMDroot38403838011:46Pts/000:00:00bashroot38653840011:48Pts/000:00:00Ps -fps -f命令輸出的各欄標題見表3-8所示。表3-8 ps -f 欄標題值描述UID初始化進程的用戶IDPID進程的進程標識號。PID可以用來殺死進程PPID進程的父進程標識號C進程的優(yōu)先級STIME進程的啟動時間TTY控制進程終端的終端舉型TIME進程使用的CPU時間的數(shù)量CMD命令名守護進程(執(zhí)行的程序的名字)步驟5:列出系統(tǒng)中運行的所有進程。輸入ps -ef命令

7、,顯示運行在系統(tǒng)中的各個進程的完全信息。執(zhí)行該命令,并與ps -命令的輸出結(jié)果對照,一致嗎?有何不同?_不一致_,出現(xiàn)整個列表注意分析當前終端窗口中的輸出結(jié)a. 顯示了多少個進程?_61_b. 進程ID的PID是什么?進稈的進稈標識號c. 啟動進程的命令 (CMD)是什么? 一命令名守護進程d. 請觀察,什么命令的 PID號是1 ?init e.再次運行ps -ef命令,計算進程的數(shù)目:61然后執(zhí)行下列命令把輸出結(jié)果輸入到wc命令中:ps -ef | wc -l第一個數(shù)字顯示的是行的數(shù)目,也是進程的數(shù)目:61執(zhí)行man ps命令,可以打開 Linux用戶命令手冊,了解 ps命令的用法,輸入 w

8、q命令 可退出用戶手冊的閱讀。man命令可以執(zhí)行嗎?結(jié)果如何?可執(zhí)行步驟6 :根據(jù)命令名搜索特定的進程。為了終止一個進程,必須找到該進程的PID。大多數(shù)運行的系統(tǒng)中,有上百個進程在運行,ps -ef的列表可能很長。如果知道啟動進程的執(zhí)行程序的名字,可以更快地找到PID。通過把ps命令的輸出結(jié)果輸入到grep中,可以搜索想要終止的特定進程,確定正確的PID。grep命令可以在其他命令的輸出中搜索所有類型的特征字符串。-1(長的輸出)選項將顯示和找到的PID相關(guān)的進程的名字;-e選項顯示PID和初始化命令的名字。a. 單擊紅帽子,在“ GNOME幫助”菜單中單擊“游戲” -“堆麻將”命令,打開“堆

9、 麻將”游戲。b. 在當前的終端窗口中,執(zhí)行命令:ps -e | grep mahjongg(“堆麻將”游戲的進程名是“mahjongg ”),查找和“堆麻將”游戲調(diào)度守護進程相關(guān)的所有進程。c. 顯示了多少個相關(guān)進程?2d. 顯示進程中最小的進程 ID號是多少?_3904c. 在當前終端窗口中執(zhí)行命令:pgrep -mahj ongg查找所有和“堆麻將”游戲調(diào)度守護進程相關(guān)的進程。ps和pgrep命令輸出之間有什么不同?沒有進程ID步驟7 :確定一個要終止的進程。當試圖終止一個程序, 或者釋放一個掛起的終端窗口的時候,殺死和不響應(yīng)的應(yīng)用相關(guān)的PID可能還是不夠的, 一般需要殺死那個進程的父進

10、程,在少數(shù)情況下,甚至要殺死父進程的父進程。為了沿著層次結(jié)構(gòu),從子進程追溯到派生它們的父進程,必須能夠查找 PID和PPID必須首先確定最低級不響應(yīng)進程的PID。通常,可以試著去殺死那個進程。如果這樣做不能夠停止那個進程,可能需要殺死它的父進程。殺死父進程將殺死所有它派生的子進程。 殺死一個父進程也比殺死幾個子進程快得多。1)在GNOME當前終端窗口中,輸入 ps命令。有多少進程正在運行?為什么只有這么少的進程?_2,可被殺死2)正在運行的進程的名字是什么?它表示什么?bash, ps3)這個進程的PID是多少?3872,3909_4)在bash shell中輸入命令csh,打開一個C she

11、ll會話,當前系統(tǒng)的會話提示符是什么?5)輸入ps -f命令,顯示在當前 shell中運行的進程的所有信息?,F(xiàn)在什么進程正在運 行?bash, -sh, ps -f6)bash 的 PID 是-sh (csh)的 PPID嗎?是7)輸入命令sleep 1000&,創(chuàng)建一個進程,把執(zhí)行掛起1000秒(大約15分鐘)。&表示在后臺運行命令,返回shell提示符,這樣您可以繼續(xù)工作。8)再次輸入ps -f命令o -sh (csh)的PID是sleep命令的PPID嗎?哪個 PID是csh (C shell) 的子進程?是,3931和39329)輸入命令 kill -9 <csh

12、的PID>退出C shell。然后再次鍵入 ps -f命令。什么PID是sleep 父命令的PPID?1sleep進程現(xiàn)在是什么類型的進程?孤兒步驟8 :使用kill命令終止一個進程。信號用于終止、掛起和繼續(xù)進程。有時候使用Ctrl + c可以終止一個不響應(yīng)的進程。這樣向進程發(fā)送一個中斷(INT)信號,終止它及所有它派生的子進程。kill命令提供了一個終止不想要的命令進程的直接方法。當想停止一個運行了很長時間 的命令的時候,或者當需要終止一個不能夠正常退出的進程的時候,它很有用。指定PID正常地殺死一個進程。kill -sig nal process -id為了使用kill命令終止一個進

13、程,應(yīng)該首先鍵入ps找出進程的PID,然后鍵入kill緊跟著PID。如果使用kill而沒有指定信號,則信號15 (SIGTERM)將被發(fā)送給特定 PID號的進程。 這叫做軟殺死,通常終止了進程。如果可能,最好軟殺死進程,這樣它可以正確地關(guān)閉文件, 溫和地終止進程。如果需要強制終止一個進程,可以使用帶-9選項的kill命令。這個選項叫做強制殺死,當shell對所有其他終止信號都不響應(yīng)的時候,需要使用它來殺死shell okill -9 process -id注意:對于shell之外的進程,把kill -9 (SIGKILL)作為最后的選項,因為它是一種生硬 的方法,不允許正確的進程終止。a. 輸

14、入命令ps -,顯示在當前shell中運行的進程的完整信息。現(xiàn)在什么進程正在運 行?_bash, sleep 1000.ps -fb. 因為sleep進程現(xiàn)在是一個孤兒進程,已經(jīng)被 init進程(PID #l)收養(yǎng),輸入命令,對 sleep的PID執(zhí)行軟殺死。如果sleep已經(jīng)終止(超過15分鐘),則重復步驟7中的8)、9)操 作,然后軟殺死sleep程序。再次輸入 ps -f命令。現(xiàn)在什么進程正在運行?bash.ps 步驟9 :按照用戶查找和終止一個進程。ps命令可以帶-u (用戶)選項使用,查找指定用戶的進程。這個命令比ps-ef使用得更多,因為一般只能夠管理屬于自己的進程。我們可以通過用

15、戶登錄名或者 UID號來查找用戶的進程。用戶只能夠終止自己的進程,但是超級用戶可以終止系統(tǒng)中所有運行的進程。ps -u login-ID 或 UID1)啟動計算器和“堆麻將”游戲GNOME應(yīng)用程序。2)使用帶-u選項的ps命令,查找以登錄ID (例如,userX)或者數(shù)字UID (例如,1004)運行的所有進程。計算器應(yīng)用程序的PID是什么?_39413)使用軟殺死終止計算器應(yīng)用程序,“堆麻將”是否仍然在桌面上運行?是 4)使用ps -u命令組合grep,查找“堆麻將”程序的 PID號,而不是使用ps -u查找整 個列表。您使用什么命令?提示:猜猜“堆麻將”程序的命令名中可能有哪個字母,使用g

16、rep搜索那些字母。ps -u root|grep kmahjonng5) 終止“堆麻將”程序。它是否還在桌面上運行?buzai6) 退出 C shell。步驟10 :刪除所有在本實驗中創(chuàng)建的文件和目錄。2、完成操作系統(tǒng)原理實驗教材中“4.3 Linux并發(fā)程序設(shè)計”實驗內(nèi)容(P101-105)步驟1:編制并發(fā)程序pipeline.c。單擊紅帽子,在“ GNOME幫助”菜單中單擊“附件”-“文本編輯器”命令,在文本編 輯中鍵入程序并保存為pipeline.c。在該程序中定義管道和文件描述符,并且創(chuàng)建子進程child。該程序用到的系統(tǒng)調(diào)用有pipe()、dup()、fork()、close、ex

17、ecl()、exit,它們的功能分別是建立管道、復制文件描述 符、創(chuàng)建進程并使子進程與父進程有相同的程序正文、關(guān)閉文件描述符、用指定文件覆蓋調(diào)用程序、撤銷當前進程。清單 4-5 pipeline.c/定義管道程序# define STD_INPUT 0/定義標準輸入設(shè)備描述符# define STD_OUTPUT 1/定義標準輸出設(shè)備描述符int fd2;main()static char process1="father",process2="child"pipe(fd);/定義管道pipeline(process1,process2);/調(diào)用自定義函

18、數(shù)pipeline()exit(1);/程序結(jié)束pipeline(char* process1,char* process2) int i;while (i=fork()=-1);if (i) close(fd0); close(STD_OUTPUT); / dup(fd1);close(fd1); execl(process1, process1,0); printf(" father failed.'n"); else close(fd1); close(STD_INPUT); dup(fd0); close(fd0); execl(process2,proce

19、ss2,0); printf("child failed.'n"); exit(2);步驟2 :編制“管道寫”程序 單擊紅帽子,在/創(chuàng)建進程,直到創(chuàng)建成功為止/關(guān)閉管道輸入描述符 關(guān)閉標準輸出描述符1/指定標準輸出描述符1為管道寫指針/關(guān)閉原始管道寫指針/用程序father覆蓋當前程序/ execl()執(zhí)行失敗father.c作為父進程的GNOME幫助”菜單中單擊“附件”/關(guān)閉管道輸出描述符/關(guān)閉標準輸入描述符 0/指定標準輸入描述符 0為管道讀指針/關(guān)閉原始管道讀指針/用程序child覆蓋當前程序/ execl()執(zhí)行失敗/程序結(jié)束部分工作。其內(nèi)容如下:-“文本編

20、輯器”命令,在文本編輯中鍵入程序并保存為father.c。清單 4-6 father.cmain()static char string=int len;len = sizeof(string); write(l, string, len); printf( “ parent, parent exit(0);Parent is using pipe write.;/*將string中的內(nèi)容寫入管道中*/n );步驟3 :編制“管道讀”程序child.c作為子進程的一部分工作。其內(nèi)容如下:單擊紅帽子,在“ GNOME幫助”菜單中單擊“附件”-“文本編輯器”命令,在文本編 輯中鍵入程序并保存為ch

21、ild.c。清單 4-7 child.cmain()char output30;read (0, output, 30) ;/*從管道中讀數(shù)據(jù)并存入output中*/printf( “ %sn” , output);return(0);步驟4 :編譯。cc -o child child.ccc -o father father.ccc -o pipeli ne pipeli ne.c步驟5 :運行。./pipeli ne若運行不成功,則應(yīng)該用文本編輯器對源程序進行修改調(diào)試。運行顯示結(jié)果為:Parent is using pipe writeChild.child,父進程為歌詞顯示。3、結(jié)合揚聲

22、器編程,設(shè)計并實現(xiàn)兩個進程并發(fā),子進程為揚聲器唱歌, 要求:子進程每唱一句,父進程顯示一句歌詞。sin g.c# inc Lude<fcnt L h># inclnde< s td io# inc lude<s td 1 ib .h># inc lude<s t r inp .h># inc I tide un i s td .h># inc 1ude<sys/ ioct 1 ,h># inc lude<sys/type s.h># includcIinux/kd.h>#def ine STD.IbPlJT 0#de

23、f ine STDJLTPUr 1int fd2:im i n< >1ta t i c clur pro I * chi Id* ,pro2 J =* fa tberv: pipet fd);pipe 1ine( pro J F p r o3);ex it( 1);pipe line1 hir*proI , k. r*pro2)Ii n 1 i ;uh i Ief ( i= fork()=-1):iff i)(c lo&e( fdO):clost?( sTb ti.Hvi.tr):dupCfdl>close f fd 1 ) iexec I(prol»pro

24、fo):pr ini f(T fa (her Fa i led An');|/ll a IH L J I U I ait H lUIHItUb 111 丄*c 1 secloset fd1> ;close(STDJKPUT):dup(fdO): close(fdo); cxe cl< pro2 »pro2 + U): printfCchild failed An*);IeKil(2):father.c# inc lude<fcn Lli>#include<stdio»h>0 inc lude<itdIib.h># in

25、c ludest r ing.h># i nc 1 vide <un isid .h>#include<sys/ioc 11.h># inc Iude<sys/1 ypt? s child.c# i nc J udc f cn t I h#unc Jude id io.h>ffmclude<sldlib.h>#imclu<le<sl:r ingrh># inc Jude <un i s td uh># inc ludc <sys/ iur LI .Ji>Vine!iide<sys/Lpes .

26、h>甬 i r> 百 I < | i nu3( ? kd ° hin 1 rmant jrgrfrchar *argv>Imi conic It _fdiin | i:mi 口-S59F7A4+ABD,523f5K7,£23.5A7,659f7»4*659 +S«7.5£7f587,587+654.587,523,5240252S.SS7J;別一SB7£9.5S7F659F7&4.5S7;mi tiiJ-50Clr250.250.750F25flP37Srl25.250P125F2S. 10(X1.250.250,2511,125

溫馨提示

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

最新文檔

評論

0/150

提交評論