版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
實驗三 進(jìn)程的創(chuàng)建和簡單控制(學(xué)生精品文檔實驗三 進(jìn)程的創(chuàng)建和簡單控制實驗?zāi)康模赫莆者M(jìn)程的概念和進(jìn)程的狀態(tài),對進(jìn)程有感性的認(rèn)識;掌握進(jìn)程創(chuàng)建方法;認(rèn)識進(jìn)程的并發(fā)執(zhí)行,了解進(jìn)程族之間各種標(biāo)識及其存在的關(guān)系;熟悉進(jìn)程的創(chuàng)建、阻塞、喚醒、撤銷等控制方法。實驗內(nèi)容:了解有關(guān)Linux進(jìn)程的屬性和進(jìn)程的層次結(jié)構(gòu);學(xué)習(xí)有關(guān)Linux的前臺和后臺進(jìn)程;學(xué)習(xí)有關(guān)Linux命令的順序執(zhí)行和并發(fā)執(zhí)行;學(xué)習(xí)有關(guān)掛起和終止進(jìn)程;了解并發(fā)程序的不可確定性,進(jìn)行簡單并發(fā)程序設(shè)計。實驗步驟:(一)Shell 下的進(jìn)程控制進(jìn)入Linux系統(tǒng)。用ps查看進(jìn)程。linux的ps命令是用來監(jiān)視系統(tǒng)進(jìn)程和資源使用情況的命令,可顯示瞬間進(jìn)程的動態(tài)。ps的參數(shù)非常多,常用的參數(shù)有:-A列出所有的進(jìn)程;-w顯示加寬可以顯示較多的信息;收集于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系管理員刪除精品文檔-au顯示較詳細(xì)的信息;-aux顯示所有包含其他使用者的進(jìn)程。收集于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系管理員刪除精品文檔用kill終止某些進(jìn)程。kill命令通過向進(jìn)程發(fā)送指定的信號來結(jié)束進(jìn)程。先使用ps查到進(jìn)程號,再使用kill殺出進(jìn)程。收集于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系管理員刪除精品文檔用pstree命令顯示系統(tǒng)中進(jìn)程層次結(jié)構(gòu)。pstree指令用ASCII字符顯示樹狀結(jié)構(gòu),清楚地表達(dá)進(jìn)程間的相互關(guān)系。語法格式pstree[-acGhlnpuUV][-H<程序識別碼>][<程序識別碼>/<用戶名稱>]收集于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系管理員刪除精品文檔(二)Linux 簡單進(jìn)程編程理解系統(tǒng)調(diào)用fork()的使用。fork()會產(chǎn)生一個與父程序相同的子程序,唯一不同之處在于其進(jìn)程號,如圖1所示。圖1系統(tǒng)調(diào)用fork()編輯下面的程序,要求實現(xiàn)父進(jìn)程產(chǎn)生兩個子進(jìn)程,父進(jìn)程顯示字符“a、”兩個子進(jìn)程,分別顯示字符 “b、”“c”,如圖2所示。#include<stdio.h>main()收集于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系管理員刪除精品文檔{intp1,p2;while((p1=fork())==-1);/*父進(jìn)程創(chuàng)建第一個進(jìn)程,直到成功*/if(p1==0)/*0返回給子進(jìn)程1*/{putchar('b');/*P1的處理過程*/else}①{/*正數(shù)返回給父進(jìn)程(子進(jìn)程號)*/while((p2=fork())==-1);/*父進(jìn)程創(chuàng)建第二個進(jìn)程,直到成功*/if(p2==0)/*0返回給子進(jìn)程2*/{putchar('c');/*P2的處理過程*/}else{putchar('a');/*P2創(chuàng)建完成后,父進(jìn)程的處理過程 */}}}圖2系統(tǒng)調(diào)用fork()的使用示例一思考:編譯連接通過后,多次運行程序,觀察進(jìn)程并發(fā)執(zhí)行結(jié)果,并分析原因。收集于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系管理員刪除精品文檔原因:當(dāng)程序并發(fā)執(zhí)行時,系統(tǒng)處于一個復(fù)雜的動態(tài)組合狀態(tài),各程序執(zhí)行的相對速度不確定,這使得這些程序多次并發(fā)執(zhí)行得到的結(jié)果不同,調(diào)度、執(zhí)行的順序由系統(tǒng)決定。刪除語句①,觀察輸出的內(nèi)容,體會fork的使用。提示:編譯和運行該程序,分析結(jié)果出現(xiàn)兩種輸出的原因。刪除語句①后:收集于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系管理員刪除精品文檔思考的問題:運行命令為什么是“./command”?將源文件保存為以.c為后綴名的文件,開始進(jìn)行編譯 $gcc-oXXXXXX.c編譯成功完成后,在當(dāng)前路徑下,生成一個名為 XXX的文件然后執(zhí)行$./XXX程序得以運行2. .和..什么含義?.表示當(dāng)前目錄,..表示上級目錄,即父目錄shell提示為什么不換行?因為在輸出語句中沒有/n換行符。輸出字母為什么和提示交錯?b,a,shell,c四個進(jìn)程并發(fā)執(zhí)行,執(zhí)行先后順序由系統(tǒng)調(diào)度決定。所以當(dāng) shell調(diào)度在c進(jìn)程前時,會出現(xiàn)輸出字母和提示交錯的現(xiàn)象。5. 管道什么含義?管道符,可以認(rèn)為它是一根水管,連接輸入端和輸出端。a|b其中,|就是管道符,將輸入端 a命令產(chǎn)生的數(shù)據(jù)傳給輸出端的 b命令來處理6. ./f1|pstree|grepf1什么含義?收集于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系管理員刪除精品文檔將./f1產(chǎn)生的數(shù)據(jù)傳給pstree來處理,經(jīng)過pstree處理后的數(shù)據(jù)再傳給grepf1來處理在運行f1文件的進(jìn)程的樹結(jié)構(gòu)中查找 f1(?)6中組合命令為什么沒有輸出?(?)如果想保留6中的./f1的輸出內(nèi)容,該如何操作?進(jìn)行重定向操作9. ./f1運行結(jié)果為什么不一樣?每種結(jié)果的產(chǎn)生原因。有a,b,c三個并發(fā)進(jìn)程,調(diào)度順序由系統(tǒng)決定①bcabacabc10../f1|pstree|grepf1運行結(jié)果為什么不一樣?截圖中四種結(jié)果的產(chǎn)生原因。由于并發(fā)進(jìn)程的調(diào)度順序是由系統(tǒng)決定的,并且 pstree顯示的是一剎那的進(jìn)程,進(jìn)程調(diào)度又是動態(tài)的。四種結(jié)果:①無結(jié)果:可能三個進(jìn)程調(diào)度已經(jīng)結(jié)束或者還未開始調(diào)度② :父進(jìn)程已經(jīng)結(jié)束,兩個子進(jìn)程還在運行③ :父進(jìn)程開始運行,子進(jìn)程還未開始調(diào)度④ :兩個子進(jìn)程還在運行(?)收集于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系管理員刪除精品文檔注意:./f1|pstree|grepf1命令之間有空格。pstree還可以加上參數(shù),-up如:./f1|pstree–up|grepf1提示:用pstree觀察進(jìn)程的父子關(guān)系,其中第二次不是錯誤,而是捕捉的時機(jī),當(dāng)時父進(jìn)程已經(jīng)結(jié)束,兩個子進(jìn)程還在運行。擴(kuò)展:修改代碼,產(chǎn)生祖孫三代的進(jìn)程。說明:三個fe和bash都是進(jìn)程,彼此間也會產(chǎn)生影響。將上述的輸出字符改為輸出較長的字符串,如圖3所示。#include<stdio.h>intmain(){intp1,p2;while((p1=fork())==-1); /*父進(jìn)程創(chuàng)建第一個進(jìn)程,直到成功*/if(p1==0) /*0返回給子進(jìn)程1*/printf("boy\n"); /*P1的處理過程*/else{ /*正數(shù)返回給父進(jìn)程(子進(jìn)程號)*/收集于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系管理員刪除精品文檔while((p2=fork())==-1); /*父進(jìn)程創(chuàng)建第二個進(jìn)程,直到成功*/if(p2==0) /*0返回給子進(jìn)程2*/printf("daughter\n"); /*P2的處理過程*/elseprintf("parent\n"); /*P2創(chuàng)建完成后,父進(jìn)程的處理過程*/}}圖3系統(tǒng)調(diào)用fork()的使用示例二思考:編譯連接通過后,多次運行程序,觀察進(jìn)程并發(fā)執(zhí)行結(jié)果:執(zhí)行結(jié)果均為:如果多次運行輸出內(nèi)容沒有變化,請分析原因:收集于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系管理員刪除精品文檔函數(shù)fork()用來創(chuàng)建一個新的進(jìn)程,該進(jìn)程幾乎是當(dāng)前進(jìn)程的一個完全拷貝,所以多次運行輸出內(nèi)容沒有變化并改寫原程序,延長每個進(jìn)程的執(zhí)行時間,再次觀察運行情況。延長執(zhí)行時間后:輸出的時間間隔變長收集于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系管理員刪除精品文檔(選作)將上述的輸出字符改為多條輸出語句,如圖4所示。#include<stdio.h>main(){intp1,p2;inti;while((p1=fork())==-1); /*父進(jìn)程創(chuàng)建第一個進(jìn)程,直到成功*/if(p1==0) /*0返回給子進(jìn)程1*/for(i=0;i<1000;i++) /*P1的處理過程*/收集于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系管理員刪除精品文檔{putchar('b');}else{ /*正數(shù)返回給父進(jìn)程(子進(jìn)程號)*/while((p2=fork())==-1); /*父進(jìn)程創(chuàng)建第二個進(jìn)程,直到成功*/if(p2==0) /*0返回給子進(jìn)程2*/for(i=0;i<1000;i++){putchar('c');} /*P2的處理過程*/elsefor(i=0;i<1000;i++){putchar('a');} /*P2創(chuàng)建完成后,父進(jìn)程的處理過程*/}}圖4系統(tǒng)調(diào)用fork()的使用示例三思考:編譯連接通過后,多次運行程序,觀察進(jìn)程并發(fā)執(zhí)行結(jié)果:如果多次運行輸出內(nèi)容沒有變化,請分析原因。并改寫原程序,延長每個進(jìn)程的執(zhí)行時間,再次觀察運行情況。如果多次運行輸出內(nèi)容發(fā)生變化,并分析原因。將進(jìn)程放在后臺運行,用pstree觀察進(jìn)程的宗族關(guān)系。系統(tǒng)創(chuàng)建一個新進(jìn)程(使用系統(tǒng)調(diào)用fork)與讓系統(tǒng)執(zhí)行一個新程序(使用系統(tǒng)調(diào)用exec)有什么差異?理解系統(tǒng)調(diào)用wait()、getpid()和getppid()的使用。程序代碼如圖5所示。#include<stdio.h>#include<sys/types.h>#include<sys/wait.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<errno.h>intmain()收集于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系管理員刪除精品文檔{charbuf[100];pid_tcld_pid;intfd;if((fd=open("temp",O_CREAT|O_TRUNC|O_RDWR,S_IRWXU))==-1){printf("openerror%d",errno);exit(1);}strcpy(buf,"Thisisparentprocesswrite\n");if((cld_pid=fork())==0){ /*這里是子進(jìn)程執(zhí)行的代碼 */strcpy(buf,"Thisischildprocesswrite\n");printf("Thisischildprocess\n");sleep(1);printf("MyPID(child)is%d\n",getpid()); /* 打印出本進(jìn)程的ID*/sleep(1);printf("MyparentPIDis%d\n",getppid()); /*打印出父進(jìn)程的ID*/sleep(1);write(fd,buf,strlen(buf));close(fd);exit(0);}else{ /*這里是父進(jìn)程執(zhí)行的代碼 */wait(0); /*如果此處沒有這一句會如何? */printf("Thisisparentprocess\n");sleep(1);printf("MyPID(parent)is%d\n",getpid()); /*打印出本進(jìn)程的ID*/sleep(1);printf("MychildPIDis%d\n",cld_pid); /* 打印出子進(jìn)程的ID*/sleep(1);write(fd,buf,strlen(buf));close(fd);}return0;}圖5系統(tǒng)調(diào)用wait()的使用收集于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系管理員刪除精品文檔思考:編譯連接通過后,多次運行程序,觀察進(jìn)程并發(fā)執(zhí)行結(jié)果:多次執(zhí)行:語句sleep(1);起什么作用?刪除所有sleep(1);語句,并觀察運行結(jié)果;讓函數(shù)滯留1秒。收集于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系管理員刪除精品文檔刪除wait(0);語句,并觀察運行結(jié)果,并請分析兩次結(jié)果不同的原因,理解wait的作用。Wait的作用:wait函數(shù)用于使父進(jìn)程阻塞,直到一個子進(jìn)程結(jié)束收集于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系管理員刪除精品文檔兩次結(jié)果不同的原因:wait(0)一般是父進(jìn)程用來等待子進(jìn)程用的,用來防止子進(jìn)程成為僵尸進(jìn)程,0表示父進(jìn)程不關(guān)心子進(jìn)程的終止?fàn)顟B(tài)。實現(xiàn)父子進(jìn)程的同步。(不做)編寫程序創(chuàng)建子進(jìn)程。父子進(jìn)程分別打印自己和父進(jìn)程的進(jìn)程ID,要求每3秒鐘打印系統(tǒng)進(jìn)程信息,重復(fù)5次后退出。父進(jìn)程待子進(jìn)程結(jié)束后退出。提示:用系統(tǒng)調(diào)用getpid和getppid獲取進(jìn)程ID;用系統(tǒng)調(diào)用fork進(jìn)程創(chuàng)建;用系統(tǒng)調(diào)用wait控制父子進(jìn)程同步;用庫函數(shù)system實現(xiàn)在一個進(jìn)程內(nèi)部運行另一個進(jìn)程,即創(chuàng)建一個新進(jìn)程;收集于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系管理員刪除精品文檔Shell命令"/bin/ps"作為system的字符串參數(shù),實現(xiàn)打印系統(tǒng)進(jìn)程信息。擴(kuò)充:關(guān)于父子進(jìn)程各自又再生成子進(jìn)程的例子。#include<unistd.h>#include<stdio.h>#include<sys/types.h>main(){pid_
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 32350.1-2025軌道交通絕緣配合第1部分:基本要求電工電子設(shè)備的電氣間隙和爬電距離
- 液狀化妝品制造工常識評優(yōu)考核試卷含答案
- 滴丸工安全規(guī)程知識考核試卷含答案
- 纖維碳化裝置操作工崗前技能競賽考核試卷含答案
- 鋁鎂粉球磨工崗前跨界整合考核試卷含答案
- 酒店員工培訓(xùn)與業(yè)務(wù)能力提升制度
- 酒店客房預(yù)訂與客戶關(guān)系管理規(guī)范制度
- 財務(wù)報告分析與改進(jìn)制度
- 城市酒店管理培訓(xùn)
- 丙烷購銷合同模板
- 2026 年初中英語《狀語從句》專項練習(xí)與答案 (100 題)
- 2026年遼寧省盤錦市高職單招語文真題及參考答案
- 農(nóng)投集團(tuán)安全生產(chǎn)制度
- 近五年貴州中考物理真題及答案2025
- 2025年黑龍江省大慶市中考數(shù)學(xué)試卷
- 2025年國補(bǔ)自查自糾報告
- 山東煙草2026年招聘(197人)考試備考試題及答案解析
- 二級醫(yī)院的DRGs培訓(xùn)課件
- 空芯光纖行業(yè)分析報告
- 2026年湖南中醫(yī)藥高等??茖W(xué)校單招職業(yè)傾向性測試題庫及答案詳解一套
- 置業(yè)顧問崗位招聘考試試卷及答案
評論
0/150
提交評論