實驗二進程控制_第1頁
實驗二進程控制_第2頁
實驗二進程控制_第3頁
實驗二進程控制_第4頁
實驗二進程控制_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、一一. 實驗目的實驗目的(1)加深對進程概念的理解,明確進程和程序的區(qū)別。)加深對進程概念的理解,明確進程和程序的區(qū)別。(2)進一步認識并發(fā)執(zhí)行的實質(zhì)。)進一步認識并發(fā)執(zhí)行的實質(zhì)。(3)掌握使用)掌握使用Linux命令管理和操作進程的方法。命令管理和操作進程的方法。二二. 實驗預備知識實驗預備知識(1)閱讀)閱讀Linux的的sched.h源碼文件,加深對進程管理概念源碼文件,加深對進程管理概念的理解。的理解。(2)閱讀)閱讀Linux的的fork.c源碼文件,分析進程的創(chuàng)建過程。源碼文件,分析進程的創(chuàng)建過程。三三. 實驗內(nèi)容實驗內(nèi)容(1)進程的創(chuàng)建)進程的創(chuàng)建 編寫一段程序,使用系統(tǒng)調(diào)用編寫

2、一段程序,使用系統(tǒng)調(diào)用fork( )創(chuàng)建兩個子進程。創(chuàng)建兩個子進程。當此程序運行時,在系統(tǒng)中有一個父進程和兩個子進當此程序運行時,在系統(tǒng)中有一個父進程和兩個子進程活動。讓每個進程在屏幕上顯示一句話和進程程活動。讓每個進程在屏幕上顯示一句話和進程ID,試觀察記錄屏幕上的顯示結(jié)果,并分析原因。試觀察記錄屏幕上的顯示結(jié)果,并分析原因。(2)創(chuàng)建進程扇、進程鏈和進程樹。)創(chuàng)建進程扇、進程鏈和進程樹。(3)使用)使用fork-exec組合,用新創(chuàng)建的進程執(zhí)行一個新的組合,用新創(chuàng)建的進程執(zhí)行一個新的任務。任務。 (4)使用一些)使用一些Linux命令操作和管理進程。命令操作和管理進程。四四. 試驗總結(jié)試驗

3、總結(jié)(1) 寫出試驗報告。寫出試驗報告。(2) 根據(jù)試驗結(jié)果,繪制出進程扇、進程鏈和進程樹,根據(jù)試驗結(jié)果,繪制出進程扇、進程鏈和進程樹,并分析原因。并分析原因。l成員名:pid_t pid功能: l內(nèi)核通過pid標識每個進程l pid與進程描述符之間有嚴格的一一對應關(guān)系與進程描述符之間有嚴格的一一對應關(guān)系數(shù)據(jù)類型說明:l pid_t實際上是一個實際上是一個int類型類型l 取值范圍:0 32767l最大值修改:/proc/sys/kernel/pid_maxl獲取進程pid : getpid() sys_getpid()1.fork( ) 創(chuàng)建一個新進程創(chuàng)建一個新進程l int fork( )

4、l該系統(tǒng)調(diào)用是該系統(tǒng)調(diào)用是“單調(diào)用雙返回單調(diào)用雙返回”。具體為:在子進程中返回。具體為:在子進程中返回0;在父進程中返回子進程在父進程中返回子進程id;出錯為;出錯為12. void exit(int status); 無返回無返回 參數(shù)參數(shù)0正常結(jié)束,正常結(jié)束,1異常結(jié)束異常結(jié)束3. int execl ( char *pathname,char *arg0,char *argn, (char *) 0); 第一個是路徑名,后面的是命令行參數(shù),最后以空指針結(jié)尾。第一個是路徑名,后面的是命令行參數(shù),最后以空指針結(jié)尾。 返回:若出錯為返回:若出錯為1,成功無返回。,成功無返回。4. pid_t

5、wait(int *status); 返回:若成功則為進程返回:若成功則為進程ID,若出錯為,若出錯為1。系統(tǒng)調(diào)用函數(shù)說明、參數(shù)值及定義系統(tǒng)調(diào)用函數(shù)說明、參數(shù)值及定義l說明 l返回值 2022-3-18第二章 處理器管理l函數(shù)原型: pid_t wait(int *status); pid_t waitpid(pid_t pid, int *status, int options);l說明: 均通過wait4()系統(tǒng)調(diào)用實現(xiàn)系統(tǒng)調(diào)用實現(xiàn) 進程終止時,會向父進程發(fā)送SIGCHLD信號信號l調(diào)用wait( )和和waitpid( )的進程的可能狀態(tài):的進程的可能狀態(tài): 阻塞l如果子進程還在運行正常

6、返回l 返回子進程的終止狀態(tài)(其中一個子進程終止)出錯返回l 沒有子進程#include#include#includemain() pid_t pid; pid=fork(); if(pid= =0) printf(“Hello,Im a child process.n”); elseprintf(“Hello,Im a parent process.n”);exit(0);編譯creat.c并運行:$ gcc creat.c$ ./a.outHello,Im a child process.Hello,Im a parent process.父子進程執(zhí)行線索父子進程執(zhí)行線索創(chuàng)建進程#inc

7、lude#include#includemain(void) int i, n=5; pid_t pid; for(i=1;i0和0的情況,運行并分析結(jié)果。扇進程等待示例waittest1.cl大多情況下子進程從fork返回后都調(diào)用返回后都調(diào)用exec()函數(shù)來函數(shù)來執(zhí)行新的程序l進程調(diào)用exec()函數(shù)時,該進程完全由新程序函數(shù)時,該進程完全由新程序替代,新程替代,新程序從main開始執(zhí)行開始執(zhí)行l(wèi) exec()并不創(chuàng)建新進程,前后進程并不創(chuàng)建新進程,前后進程ID不變,但不變,但用另外一個用另外一個程序替代當前進程的正文、數(shù)據(jù)、堆棧等l函數(shù)原型l int execl( const char

8、*path, const char *arg, .);l int execlp( const char *file, const char *arg, .);l int execle( const char *path, const char *arg , ., char* const envp);l int execv( const char *path, char *const argv );l execve( const char *filename *const argv *constint filename, char , char envp );l int execvp( const char *file, char *const argv );#include #include#include #include#include #include void main( ) pid_t pid; int status; /等待的退出狀態(tài) pid=fork( ); if(pid= =-1) perror(“Fork faild to creat a process”); exit(1); else if (pid= =0) if(execl(“/bin/ls”, “l(fā)s”, “-l”,NULL)0) perro

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論