資源描述:
《實(shí)驗(yàn)1 進(jìn)程控制與描述》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、實(shí)驗(yàn)一:進(jìn)程控制與描述一、實(shí)驗(yàn)?zāi)康模豪肳indows提供的API函數(shù),編寫(xiě)程序,實(shí)現(xiàn)進(jìn)程的創(chuàng)建和終止(如創(chuàng)建寫(xiě)字板進(jìn)程及終止該進(jìn)程),加深對(duì)操作系統(tǒng)進(jìn)程概念的理解,觀察操作系統(tǒng)進(jìn)程運(yùn)行的動(dòng)態(tài)性能,獲得包含多進(jìn)程的應(yīng)用程序編程經(jīng)驗(yàn)。二、實(shí)驗(yàn)原理:1.進(jìn)程的創(chuàng)建進(jìn)程的創(chuàng)建通過(guò)CreateProcess()函數(shù)來(lái)實(shí)現(xiàn),CreateProcess()通過(guò)創(chuàng)建一個(gè)新的進(jìn)程及在其地址空間內(nèi)運(yùn)行的主線程來(lái)啟動(dòng)并運(yùn)行一個(gè)新的程序。具體地,在執(zhí)行CreateProcess()函數(shù)時(shí),首先由操作系統(tǒng)負(fù)責(zé)創(chuàng)建一個(gè)進(jìn)程內(nèi)核對(duì)象,初始化計(jì)數(shù)為1,并立即為新進(jìn)
2、程創(chuàng)建一塊虛擬地址空間。隨后將可執(zhí)行文件或其他任何必要的動(dòng)態(tài)鏈接庫(kù)文件的代碼和數(shù)據(jù)裝載到該地址空間中。在創(chuàng)建主線程時(shí),也是首先由系統(tǒng)負(fù)責(zé)創(chuàng)建一個(gè)線程內(nèi)核對(duì)象,并初始化為1。最后啟動(dòng)主線程并執(zhí)行進(jìn)程的入口函數(shù)WinMain(),完成對(duì)進(jìn)程和執(zhí)行線程的創(chuàng)建。2.實(shí)現(xiàn)技巧CreateProcess()函數(shù)的原型聲明如下:BOOLCreateProcess(LPCTSTRlpApplicationName,??????//可執(zhí)行模塊名LPTSTRlpCommandLine,???????//命令行字符串LPSECURITY_ATTRIBUTE
3、SlpProcessAttributes,??//進(jìn)程的安全屬性LPSECURITY_ATTRIBUTESlpThreadAttributes,??//線程的安全屬性BOOLbInheritHandles,???????//句柄繼承標(biāo)志DWORDdwCreationFlags,???????//創(chuàng)建標(biāo)志LPVOIDlpEnvironment,???????//指向新的環(huán)境塊的指針LPCTSTRlpCurrentDirectory,??????//指向當(dāng)前目錄名的指針LPSTARTUPINFOlpStartupInfo,?????//指
4、向啟動(dòng)信息結(jié)構(gòu)的指針LPPROCESS_INFORMATIONlpProcessInformation??//指向進(jìn)程信息結(jié)構(gòu)的指針)可以指定第一個(gè)參數(shù),即應(yīng)用程序的名稱,其中包括相對(duì)于當(dāng)前進(jìn)程的當(dāng)前目錄的全路徑或者利用搜索方法找到的路徑;lpCommandLine參數(shù)允許調(diào)用者向新應(yīng)用程序發(fā)送數(shù)據(jù);接下來(lái)的三個(gè)參數(shù)與進(jìn)程和它的主線程以及返回的指向該對(duì)象的句柄的安全性有關(guān)。然后是標(biāo)志參數(shù),用以在dwCreationFlags參數(shù)中指明系統(tǒng)應(yīng)該給予新進(jìn)程什么行為。經(jīng)常使用的標(biāo)志是CREATE_SUSPNDED,告訴主線程立刻暫停。當(dāng)準(zhǔn)備
5、好時(shí),應(yīng)該使用ResumeThread()API來(lái)啟動(dòng)進(jìn)程。另一個(gè)常用的標(biāo)志是CREATE_NEW_CONSOLE,告訴新進(jìn)程啟動(dòng)自己的控制臺(tái)窗口,而不是利用父窗口。這一參數(shù)還允許設(shè)置進(jìn)程的優(yōu)先級(jí),用以向系統(tǒng)指明,相對(duì)于系統(tǒng)中所有其他的活動(dòng)進(jìn)程來(lái)說(shuō),給此進(jìn)程多少CPU時(shí)間。接著是CreateProcess()函數(shù)調(diào)用所需要的三個(gè)通常使用缺省值的參數(shù)。第一個(gè)參數(shù)是lpEnvironment參數(shù),指明為新進(jìn)程提供的環(huán)境;第二個(gè)參數(shù)是lpCurrentDirectory,可用于向主創(chuàng)進(jìn)程發(fā)送與缺省目錄不同的新進(jìn)程使用的特殊的當(dāng)前目錄;第三個(gè)
6、參數(shù)是STARTUPINFO數(shù)據(jù)結(jié)構(gòu)所必需的,用于在必要時(shí)指明新應(yīng)用程序的主窗口的外觀。CreateProcess()的最后一個(gè)參數(shù)是用于新進(jìn)程對(duì)象及其主線程的句柄和ID的返回值緩沖區(qū)。以PROCESS_INFORMATION結(jié)構(gòu)中返回的句柄調(diào)用CloseHandle()API函數(shù)是重要的,因?yàn)槿绻粚⑦@些句柄關(guān)閉的話,有可能危及主創(chuàng)進(jìn)程終止之前的任何未釋放的資源。3.終止進(jìn)程所有進(jìn)程都是以調(diào)用ExitProcess()或者TerminateProcess()函數(shù)結(jié)束的。三.實(shí)驗(yàn)內(nèi)容與步驟1進(jìn)程的創(chuàng)建和終止。編寫(xiě)一段程序,可以創(chuàng)建一個(gè)
7、進(jìn)程,并終止當(dāng)前創(chuàng)建的進(jìn)程。試觀察記錄程序執(zhí)行的結(jié)果,并分析原因。2利用VC++6.0實(shí)現(xiàn)上述程序設(shè)計(jì)和調(diào)試操作,對(duì)于進(jìn)程創(chuàng)建的成功與否、終止進(jìn)程操作的成功與否提供一定的提示框。3通過(guò)閱讀和分析實(shí)驗(yàn)程序,學(xué)習(xí)創(chuàng)建進(jìn)程、觀察進(jìn)程和終止進(jìn)程的程序設(shè)計(jì)方法四、實(shí)驗(yàn)過(guò)程與實(shí)驗(yàn)運(yùn)行結(jié)果:本實(shí)驗(yàn)顯示了創(chuàng)建子進(jìn)程的基本框架。該程序只是再一次地啟動(dòng)自身,顯示它的系統(tǒng)進(jìn)程ID和它在進(jìn)程列表中的位置。運(yùn)行結(jié)果如圖所示:五、源程序://proccreate項(xiàng)目#include#include#include8、io.h>//創(chuàng)建傳遞過(guò)來(lái)的進(jìn)程的克隆過(guò)程并賦于其ID值voidStartClone(intnCloneID){//提取用于當(dāng)前可執(zhí)行文件的文件名TCHARszFilename[MAX_PATH];::GetModule