版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗3流程管理一、實驗目的1.熟悉和理解流程和流程樹的概念,并掌握流程的管理機制2.建立、取消及執(zhí)行處理,以加深對同時執(zhí)行處理的理解3.闡明進程與程序、并行和串行運行之間的區(qū)別掌握如何使用c程序實現(xiàn)過程控制。二、實驗時間2小時三、實驗背景知識相關系統(tǒng)調用1,exec()系列(exec備用進程映像)系統(tǒng)調用exec()系列,也可以用于運行新程序。Fork()只是將父進程的用戶級上下文復制到新進程,而exec()系列可以將可執(zhí)行的二進制文件復蓋到新進程的用戶級上下文的存儲空間中,從而更改新進程的用戶級上下文。Exec()系列的所有系統(tǒng)調用都執(zhí)行相同的功能,并將新程序加載到內存中,從而更改調用進程的
2、執(zhí)行代碼以形成新進程。如果調用Exec()成功,則將重新定義調用進程,并在新程序的門戶上運行該調用進程,從而生成新進程的進程標識符id與調用進程相同的新進程。Exec()使用新進程替換原始進程,而不是設置與調用進程同時運行的子進程。因此,如果exec()調用成功,則與fork()不同,不會返回任何數(shù)據(jù)。Exec()系統(tǒng)調用在UNIX系統(tǒng)庫unistd.h中包含5個execl、execlp、execle、execv和execvp,除了它們以不同的方式提供參數(shù)以外,基本功能是相同的。#includeIntexecl (const char * pathname,const char * arg)、
3、);Intexeclp (const char * filename,const char * arg)、);Intexecle (const char * pathname,const char * arg,const char * envp);Intexecv (const char * pathname,char * constar gv);Intexecvp (const char * filename,char * constar gv);參數(shù):Path參數(shù)表示要啟動程序的名稱包含路徑名。Arg引數(shù)表示啟動程式的引數(shù),通常第一個引數(shù)是正在執(zhí)行的指令名稱,arg必須以NULL結束,而不
4、是路徑。返回值:成功返回0,失敗返回-1附注:上述exec系列函數(shù)預設是透過execve系統(tǒng)呼叫來實作。1)帶有l(wèi)的exec函數(shù)(如execl、execlp、execle),表示后面的參數(shù)是可變參數(shù),并且都以空指針結束。#include#include#includeInt main(void)printf( entering main process- n );Execl (/bin/ls , ls , l ,null);printf( exiting main process- n );return 0;運行結果:用execl替換當前進程main不會輸出最后所有打印語句。(2)帶有p的ex
5、ec函數(shù):execlp,execvp是第一個參數(shù)path,它在環(huán)境變量PATH中查找命令,即使只給出命令名,而不輸入完整路徑#include#include#includeInt main(void)printf( entering main process- n );If (execl (ls , ls , ls , l ,null) 0)/if (execlp (ls , ls , ls , l ,null) 0)perror(“excl error”);return 0;無法替換結果,因為未指定路徑名。藍色門變成紅色部分后,就可以成功地替換。3)不帶l的exec函數(shù):execv,exec
6、vp表示命令所需的參數(shù)為char *arg,并且arg的最后一個元素必須為NULL。#include#include#includeInt main(void)printf( entering main process- n );Int retChar *argv=ls ,-l ,NULL ;Ret=execvp(ls ,argv);If(ret=-1)perror( execl error );printf( exiting main process- n );return 0;4)帶有e的exec函數(shù):execle表示將環(huán)境變量傳遞到必須替換的進程2、exec()和fork()一起使用將系
7、統(tǒng)調用exec和fork()結合使用,可以有力地支持程序開發(fā)。使用Fork()設置子進程,然后在子進程中使用exec()可以同時運行與父進程完全不同的子進程。通常,wait、exec一起使用的模型如下:Int狀態(tài);.if(fork()=0).Execl(.);.Wait(狀態(tài));3、wait()如果子進程在父進程終止之前運行,則與父進程的連接也將正常終止父進程的運行,或者父進程將通過調用wait終止。子進程終止后,內核將子進程稱為僵尸進程,該進程只保留最少部分內核數(shù)據(jù)結構,以便父進程查詢子進程的終止狀態(tài)。在流程表中表示子流程的數(shù)據(jù)項不會立即釋放,但不再處于活動狀態(tài),但子流程仍保留在系統(tǒng)中,因為
8、子流程需要存儲退出代碼,以備父流程的后續(xù)wait調用使用。被稱為“僵硬的過程”。調用Wait函數(shù)查詢子進程的終止狀態(tài),如果子進程的執(zhí)行未完成,父進程將暫停,等待子進程的執(zhí)行結束。如果子流程未完成,父流程將繼續(xù)等待。Wait()調用暫停進程,直到子進程因暫?;蚪K止而發(fā)出軟中止信號。如果在Wait()之前暫?;蚪K止了子進程,則將返回調用進程以進行相應的處理。系統(tǒng)調用格式:#include#includeInt wait(狀態(tài))Int * status其中status是用戶空間的地址。如果8位反應子進程的狀態(tài)為0,則該子進程正常退出,如果不是0,則出現(xiàn)各種問題。高8位返回exit()的返回值。Exi
9、t()返回值由系統(tǒng)給出。進程結束時,Linux系統(tǒng)將生成SIGCHLD信號以通知父進程。如果父流程未查詢子流程的終止原因,則該子流程已停止,但未完全終止。此時,此子進程稱為僵尸進程。例如,在系統(tǒng)提示“$”后,子進程繼續(xù)輸出信息,用戶可能不希望父進程在子進程之前終止。系統(tǒng)可以調用wait等待父進程,直到子進程終止,然后繼續(xù)執(zhí)行以下語句:Status參數(shù)用于存儲收集過程結束時的某些狀態(tài),并且是指向int類型的指針。但是,如果您不關心此子進程是如何死的,而只是移除僵尸進程(大多數(shù)情況下您會這樣認為),則可以將此參數(shù)設置為NULL,如下所示:Pid=wait(空);如果成功,wait將返回收集的子進程
10、的進程ID,如果調用進程沒有子進程,則調用失敗,wait將返回-1。如果Status參數(shù)的值不是NULL,wait將刪除子進程退出時的狀態(tài)并將其存儲在其中。這是一個整數(shù)值(int),指示子進程是正常終止還是異常終止,正常終止時的返回值,還是由什么信號終止。此信息保存在整數(shù)的不同二進制位中,因此以一般的方式閱讀會非常麻煩,人們設計了一套特殊的宏來完成此任務。4,exit()進程終止可以通過相應的函數(shù)完成。#includevoid exit(int status);/退出正在運行的程序并關閉該文件打開的所有文件描述符。其中status是返回到父進程以供審閱的整數(shù)。您可以注冊沒有返回值的函數(shù),而沒有
11、int atexit(void(* function(* function)(void)/程序正常退出時調用的參數(shù)。參數(shù)function是指向調用的程序的文件指針。調用將成功返回0,否則返回-1,并將errno設置為相應的值Int on _ exit (void (* function) (int,void *),void * arg);/注冊的函數(shù)具有參數(shù),并且退出狀態(tài)和參數(shù)arg都由該函數(shù)使用,但其工作方式與atexit類似void abort(void);/用于傳輸結束當前進程的SIGABRT信號WIFEXITED(status):此宏用于指示子進程是否正常終止,否則返回非零值。WEXI
12、TSTATUS(status)獲取子進程exit()返回的退出代碼。通常,要使用此宏,必須首先使用WIFEXITED。如果WIFSIGNALED(status)子進程因信標而終止,則此宏值將為true,以終止進程執(zhí)行。在UNIX/LINUX上,為了及時回收進程使用的資源并減少父進程的干預,使用exit()自行終止進程,通常父進程在創(chuàng)建子進程時,必須通過在進程末尾放置exit()自行終止子進程。Exit(0)表示進程正常終止,exit(1)表示進程運行錯誤,異常終止。如果調用進程正在運行exit(),而父進程正在等待退出,則父進程可以立即獲得返回的整數(shù)。內核必須為exit()完成以下操作:(1)
13、關閉軟中斷(2)回收資源(3)創(chuàng)建會計信息(4)將進程設置為“硬”狀態(tài)。四、實驗內容1.了解系統(tǒng)調用(execl、execlp、execle、execv、execvp)的使用示例3.1:創(chuàng)建進程并使用exec替換為其他程序的進程7#include#include#includeMain()Int PIDPID=fork();交換機(pid)Case-1:Printf(fork fail! n );exit(1);Case0:printf( child process PID :% d . n ,get PID();execl(“/bin/ls”、“l(fā)s”、“l(fā)s”、“-1”、null);Pri
14、ntf(exec fail! n );exit(1);Default:printf(“parent process PID :m”)。 n ,getpid();Wait(空);Printf(ls completed! n );exit(0);運行程序并回答以下問題:問題1:此程序的總進程是多少?問題2:程序運行結果為什么意味著什么?2.父流程查詢子流程的結束示例3.2:#include#include#include#include#includeInt main()Pid _ t PIDChar * messageint n;printf( fork program starting n )
15、;PID=fork();交換機(PID) & nbspCase -1:printf(“fork error”! n );exit(1);Case 0:message= child process is printing ;n=5;BreakDefault:message= parent process id printing ;n=3;Breakfor(;n0;N-) puts(message);sleep(1);If(pid)Pid _ t child _ pidInt stat _ valchild _ PID=wait(stat _ val);printf(“child has finished : PID=% d . n”,child _ PID);exit(0);運行程序并回答以下問題:問題1:如果程序不包含紅色代碼部分,會發(fā)生什么情況?為什么結果會出現(xiàn)在下一行的提示“#”或“$”之后?問題2:添加紅色部分程序的作用是什么?示例3.3:#include#include#
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年工業(yè)機器人系統(tǒng)操作員職業(yè)技能認證模擬試卷及答案
- 2025年下半年衛(wèi)生監(jiān)督信息員培訓測試題及答案
- 2025年幼兒園副園長年度工作總結
- 2025年三級攝影(攝像)師考試題庫及完整答案
- 河道治理及生態(tài)修復工程施工方案與技術措施
- 醫(yī)療服務2026年特色發(fā)展
- 2026年銷售技巧提升培訓課程
- 2026 年民政局離婚協(xié)議書正規(guī)模板含全部核心條款
- 2026 年離婚協(xié)議書合規(guī)制式模板
- 2026 年法定化離婚協(xié)議書規(guī)范模板
- 2026年殘疾人聯(lián)合會就業(yè)服務崗招聘筆試適配題含答案
- 2026年山西警官職業(yè)學院單招綜合素質筆試備考題庫帶答案解析
- 2026年農(nóng)夫山泉-AI-面試題目及答案
- 2026凱翼汽車全球校園招聘(公共基礎知識)綜合能力測試題附答案
- 山東省威海市環(huán)翠區(qū)2024-2025學年一年級上學期1月期末數(shù)學試題
- 2025年手術室護理實踐指南知識考核試題及答案
- 外貿公司采購專員績效考核表
- 彩禮分期合同范本
- 胸腺瘤伴重癥肌無力課件
- 十五五安全生產(chǎn)規(guī)劃思路
- 一年級地方課程教案
評論
0/150
提交評論