




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)一:進(jìn)程控制描述與控制[1]Windows“任務(wù)管理器”的進(jìn)程管理實(shí)驗(yàn)名稱Windows“任務(wù)管理器”的進(jìn)程管理實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)在Windows任務(wù)管理器中對(duì)程序進(jìn)程進(jìn)行響應(yīng)的管理操作,熟悉操作系統(tǒng)進(jìn)程管理的概念,學(xué)習(xí)觀察操作系統(tǒng)運(yùn)行的動(dòng)態(tài)性能。實(shí)驗(yàn)內(nèi)容與步驟1.使用任務(wù)管理器終止進(jìn)程2.顯示其他進(jìn)程計(jì)數(shù)器3.更改正在運(yùn)行的程序的優(yōu)先級(jí)
啟動(dòng)并進(jìn)入Windows環(huán)境,單擊Ctrl+Alt+Del鍵,或者右鍵單擊任務(wù)欄,在快捷菜單中單擊“任務(wù)管理器”命令,打開(kāi)“任務(wù)管理器”窗口。在本次實(shí)驗(yàn)中,你使用的操作系統(tǒng)版本是:_______Windows_XP______________________當(dāng)前機(jī)器中由你打開(kāi),正在運(yùn)行的應(yīng)用程序有:1)_______________2)___________實(shí)驗(yàn)一___3)_________操作系統(tǒng)_____________4)___________百度首頁(yè)________5)____________68_______Windows“任務(wù)管理器”的窗口由____4__個(gè)選項(xiàng)卡組成,分別是:1)_______應(yīng)用程序______________2)_進(jìn)程__________________3)______性能___________________4)________聯(lián)網(wǎng)__________________當(dāng)前“進(jìn)程”選項(xiàng)卡顯示的欄目分別是(可移動(dòng)窗口下方的游標(biāo)/箭頭,或使窗口最大化進(jìn)行觀察):1.使用任務(wù)管理器終止進(jìn)程步驟1:?jiǎn)螕簟斑M(jìn)程”選項(xiàng)卡,一共顯示了__40___個(gè)進(jìn)程。請(qǐng)?jiān)囍鴧^(qū)分一下,其中:系統(tǒng)(SYSTEM)進(jìn)程有____25__個(gè),填入表3-1中。
表3-1實(shí)驗(yàn)記錄
Wmiprvse
SYSTEM
00
5376k
cidaemon
SYSTEM
00
300k
cidaemon
SYSTEM00
856k
cidaemon
SYSTEM
50
284k
cisvc
SYSTEM
00
924k
csrss
SYSTEM
00
7412k
mqtgsvcSYSTEM
00
4144k
mqsvc
SYSTEM
00
6632k
snmp
SYSTEM
00
4340k
tcpservcs
SYSTEM
00
3840k
Smss
SYSTEM
00
404kSystemSYSTEM00300kSystemIdleProcessSYSTEM9928k}
intmain(intargc,char*argv[]){//確定進(jìn)程在列表中的位置intnClone(0);if(argc>1){//從第二個(gè)參數(shù)中提取克隆ID::sscanf(argv[1],“%d”,&nClone);}
//顯示進(jìn)程位置std::cout<<“ProcessID:“<<::GetCurrentProcessId()<<“,CloneID:“<<nClone<<std::endl;
//檢查是否有創(chuàng)建子進(jìn)程的需要constintc_nCloneMax=25;if(nClone<C_nCloneMax){//發(fā)送新進(jìn)程的命令行和克隆號(hào)StartClone(++nClone);}//在終止之前暫停一下(l/2秒)::Sleep(500);
return0;}步驟4:?jiǎn)螕簟癇uild”菜單中的“Compile3-5.cpp”命令,系統(tǒng)顯示: Thisbuildcommandrequiresanactiveprojectworkspace.Wouldyouliketo
createadefaultprojectworkspace? (build命令需要一個(gè)活動(dòng)的項(xiàng)目工作空間。你是否希望建立一個(gè)缺省的
項(xiàng)目工作空間?)單擊“是”按鈕確認(rèn)。系統(tǒng)對(duì)3-5.cpp進(jìn)行編譯。步驟5:編譯完成后,單擊“Build”菜單中的“Build3-5.exe”命令,建立3-5.exe可執(zhí)行文件。操作能否正常進(jìn)行?如果不行,則可能的原因是什么?____不能正確運(yùn)行,因?yàn)槌绦蛑谐霈F(xiàn)了很多的語(yǔ)法和拼寫(xiě)方面的錯(cuò)誤__________________________________________________________步驟6:在工具欄單擊“ExecuteProgram”(執(zhí)行程序)按鈕,或者按Ctrl+F5鍵,或者單擊“Build”菜單中的“Execute3-5.exe”命令,執(zhí)行3-5.exe程序。步驟7:按Ctrl+S鍵可暫停程序的執(zhí)行,按Ctrl+Pause(Break)鍵可終止程序的執(zhí)行。清單3-5展示的是一個(gè)簡(jiǎn)單的使用CreateProcess()API函數(shù)的例子。首先形成簡(jiǎn)單的命令行,提供當(dāng)前的EXE文件的指定文件名和代表生成克隆進(jìn)程的號(hào)碼。大多數(shù)參數(shù)都可取缺省值,但是創(chuàng)建標(biāo)志參數(shù)使用了:___________________CREATENEWCONSOLE_____________________________________標(biāo)志,指示新進(jìn)程分配它自己的控制臺(tái),這使得運(yùn)行示例程序時(shí),在任務(wù)欄上產(chǎn)生許多活動(dòng)標(biāo)記。然后該克隆進(jìn)程的創(chuàng)建方法關(guān)閉傳遞過(guò)來(lái)的句柄并返回main()函數(shù)。在關(guān)閉程序之前,每一進(jìn)程的執(zhí)行主線程暫停一下,以便讓用戶看到其中的至少一個(gè)窗口。CreateProcess()函數(shù)有____10____個(gè)核心參數(shù)?本實(shí)驗(yàn)程序中設(shè)置的各個(gè)參數(shù)的值是:a.__szFilename_________________________________________;b.___szCmdLine_______________________________________;c.____NULL_______________________________________;d.____NULL______________________________________;e._____FALSE_______________________________________;f._____CREATE_NEW_CONSOLE_______________________________;g.____NULL_______________________________________;h.____NULL_______________________________________;i._____&si________________________________________;j._____&pi_______________________________________。程序運(yùn)行時(shí)屏幕顯示的信息是:2.正在運(yùn)行的進(jìn)程本實(shí)驗(yàn)的程序中列出了用于進(jìn)程信息查詢的API函數(shù)GetProcessVersion()與GetVersionEx()的共同作用,可確定運(yùn)行進(jìn)程的操作系統(tǒng)的版本號(hào)。步驟8:在VisualC++窗口的工具欄中單擊“打開(kāi)”按鈕,在“打開(kāi)”對(duì)話框中找到并打開(kāi)實(shí)驗(yàn)源程序3-6.cpp。清單3-6使用進(jìn)程和操作系統(tǒng)的版本信息//version項(xiàng)目#include<windows.h>#include<iostream>
//利用進(jìn)程和操作系統(tǒng)的版本信息的簡(jiǎn)單示例voidmain(){//提取這個(gè)進(jìn)程的ID號(hào)DWORDdwIdThis=::GetCurrentProcessId();
//獲得這一進(jìn)程和報(bào)告所需的版本,也可以發(fā)送0以便指明這一進(jìn)程DWORDdwVerReq=::GetProcessVersion(dwIdThis);WORDwMajorReq=(WORD)dwVerReq>16);WORDwMinorReq=(WORD)dwVerReq&0xffff);std::cout<<“ProcessID:“<<dwIdThis<<“,requiresOS:“<<wMajorReq<<wMinorReq<<std
::endl
;
//設(shè)置版本信息的數(shù)據(jù)結(jié)構(gòu),以便保存操作系統(tǒng)的版本信息OSVERSIONINFOEXosvix;::ZeroMemory(&osvix,sizeof(osvix));osvix.dwOSVersionInfoSize=sizeof(osvix);
//提取版本信息和報(bào)告::GetVersionEx(reinterpret_cast<LPOSVERSIONINFO>(&osvix));std::cout<<“RunningonOS:“<<osvix.dwMajorVersion<<“.”<<osvix.dwMinorVersion<<std::endl;
//如果是NTS(WindowsServer2003)系統(tǒng),則提高其優(yōu)先權(quán)if(osvix.dwPlatformld==VER_PLATFORM_WIN32_NT&&osvix.dwMajorVersion>=5){//改變優(yōu)先級(jí)::SetPriorityClass(::GetCurrentProcess(), //利用這一進(jìn)程HIGH_PRIORITY_CLASS); //改變?yōu)閔igh
//報(bào)告給用戶std::cout<<“TaskManagershouldnownowindicatethis”“processishighpriority.”<<std::endl;}}步驟9:?jiǎn)螕簟癇uild”菜單中的“Compile3-6.cpp”命令,再單擊“是”按鈕確認(rèn)。系統(tǒng)對(duì)3-6.cpp進(jìn)行編譯。步驟10:編譯完成后,單擊“Build”菜單中的“Build3-6.exe”命令,建立3-6.exe可執(zhí)行文件。 操作能否正常進(jìn)行?如果不行,則可能的原因是什么?__不能正常運(yùn)行,因?yàn)槌绦蛑谐霈F(xiàn)許多語(yǔ)法和拼寫(xiě)方面的錯(cuò)誤_______________________________________________________________________________________________________________________________________________步驟11:在工具欄單擊“ExecuteProgram”(執(zhí)行程序)按鈕,執(zhí)行3-6.exe程序。運(yùn)行結(jié)果:當(dāng)前PID信息:___5310OS:00___________________________________當(dāng)前操作系統(tǒng)版本:__6.1_____________________________________________________系統(tǒng)提示信息:_TaskManagershouldnownowindicatethisprocessishighpriority._____________________________________________________________________________清單3-6中的程序向讀者表明了如何獲得當(dāng)前的PID和所需的進(jìn)程版本信息。為了運(yùn)行這一程序,系統(tǒng)處理了所有的版本不兼容問(wèn)題。接著,程序演示了如何使用GetVersionEx()API函數(shù)來(lái)提取OSVERSIONINFOEX結(jié)構(gòu)。這一數(shù)據(jù)塊中包括了操作系統(tǒng)的版本信息。其中,“OS:5.0”表示當(dāng)前運(yùn)行的操作系統(tǒng)是:________________WindowsServer2003_______________________________清單3-6的最后一段程序利用了操作系統(tǒng)的版本信息,以確認(rèn)運(yùn)行的是WindowsServer2003。代碼接著將當(dāng)前進(jìn)程的優(yōu)先級(jí)提高到比正常級(jí)別高。步驟12:?jiǎn)螕鬋trl+Alt+Del鍵,進(jìn)入“Windows任務(wù)管理器”,在“應(yīng)用程序”選項(xiàng)卡中右鍵單擊“3-6”任務(wù),在快捷菜單中選擇“轉(zhuǎn)到進(jìn)程”命令。在“Windows任務(wù)管理器”的“進(jìn)程”選項(xiàng)卡中,與“3-6”任務(wù)對(duì)應(yīng)的進(jìn)程映像名稱是(為什么?):_____________VCSPAWN.EXE___________________右鍵單擊該進(jìn)程名,在快捷菜單中選擇“設(shè)置優(yōu)先級(jí)”命令,可以調(diào)整該進(jìn)程的優(yōu)先級(jí),如設(shè)置為“高”后重新運(yùn)行3-6.exe程序,屏幕顯示有變化嗎?為什么?______PID信息變?yōu)?488OS:00_________________________________________________________________________________________________________________________________________________________________________除了改變進(jìn)程的優(yōu)先級(jí)以外,還可以對(duì)正在運(yùn)行的進(jìn)程執(zhí)行幾項(xiàng)其他的操作,只要獲得其進(jìn)程句柄即可。SetProcessAffinityMask()API函數(shù)允許開(kāi)發(fā)人員將線程映射到處理器上;SetProcessPriorityBoost()API可關(guān)閉前臺(tái)應(yīng)用程序優(yōu)先級(jí)的提升;而SetProcessWorkingSet()API可調(diào)節(jié)進(jìn)程可用的非頁(yè)面RAM的容量;還有一個(gè)只對(duì)當(dāng)前進(jìn)程可用的API函數(shù),即SetProcessShutdownParameters(),可告訴系統(tǒng)如何終止該進(jìn)程。3.終止進(jìn)程在清單3-7列出的程序中,先創(chuàng)建一個(gè)子進(jìn)程,然后指令它發(fā)出“自殺彈”互斥體去終止自身的運(yùn)行。步驟13:在VisualC++窗口的工具欄中單擊“打開(kāi)”按鈕,在“打開(kāi)”對(duì)話框中找到并打開(kāi)實(shí)驗(yàn)源程序3-7.cpp。清單3-7指令其子進(jìn)程來(lái)“殺掉”自己的父進(jìn)程//procterm項(xiàng)目#include<windows.h>#include<iostream>#include<stdio.h>staticLPCTSTRg_szMutexName=“w2kdg.ProcTerm.mutex.Suicide”;
//創(chuàng)建當(dāng)前進(jìn)程的克隆進(jìn)程的簡(jiǎn)單方法voidStartClone(){//提取當(dāng)前可執(zhí)行文件的文件名TCHARszFilename[MAX_PATH];::GetModuleFileName(NULL,szFilename,MAX_PATH);
//格式化用于子進(jìn)程的命令行,指明它是一個(gè)EXE文件和子進(jìn)程TCHARszCmdLine[MAX_PATH];::sprintf(szCmdLine,“\”%s\“child”,szFilename);
//子進(jìn)程的啟動(dòng)信息結(jié)構(gòu)STARTUPINFOsi;::ZeroMemory(reinterpret_cast<void*>(&si),sizeof(si));si.cb=sizeof(si); //應(yīng)當(dāng)是此結(jié)構(gòu)的大小
//返回的用于子進(jìn)程的進(jìn)程信息PROCESS_INFORMATIONpi;
//用同樣的可執(zhí)行文件名和命令行創(chuàng)建進(jìn)程,并指明它是一個(gè)子進(jìn)程BOOLbCreateOK=::CreateProcess(szFilename, //產(chǎn)生的應(yīng)用程序名稱(本EXE文件)szCmdLine, //告訴我們這是一個(gè)子進(jìn)程的標(biāo)志NULL, //用于進(jìn)程的缺省的安全性NULL, //用于線程的缺省安全性FALSE, //不繼承句柄CREATE_NEW_CONSOLE, //創(chuàng)建新窗口,使輸出更直觀NULL, //新環(huán)境NULL, //當(dāng)前目錄&si, //啟動(dòng)信息結(jié)構(gòu)&pi); //返回的進(jìn)程信息
//釋放指向子進(jìn)程的引用if(bCreateOK){::CloseHandle(pi.hProcess);::CloseHandle(pi.hThread);}}voidParent(){//創(chuàng)建“自殺”互斥程序體HANDLEhMutexSuicide=::CreateMutex(NULL, //缺省的安全性TRUE, //最初擁有的g_szMutexName); //為其命名if(hMutexSuicide!=NULL){//創(chuàng)建子進(jìn)程std::cout<<“Creatingthechildprocess.”<<std::endl;::StartClone();
//暫停::sleep(5000);
//指令子進(jìn)程“殺”掉自身std::cout<<“Tellingthechildprocesstoquit.”<<std::endl;::ReleaseMutex(hMutexSuicide);
//消除句柄::CloseHandle(hMutexSuicide);}}
voidChild(){//打開(kāi)“自殺”互斥體HANDLEhMutexSuicide=::OpenMutex(SYNCHRONIZE, //打開(kāi)用于同步FALSE, //不需要向下傳遞g_szMutexName); //名稱if(hMutexSuicide!=NULL){//報(bào)告正在等待指令std::cout<<“Childwaitingforsuicideinstructions.”<<std::endl;::WaitForSingleObject(hMutexSuicide,INFINITE);
//準(zhǔn)備好終止,清除句柄std::cout<<“Childquiting.”<<std::endl;::CloseHandle(hMutexSuicide);}}
intmain(intarqc,char*argv[]){//決定其行為是父進(jìn)程還是子進(jìn)程if(argc>l&&::strcmp(argv[l],“child”)==0){Child();}else{Parent();}return0;}清單3-7中的程序說(shuō)明了一個(gè)進(jìn)程從“生”到“死”的整個(gè)一生。第一次執(zhí)行時(shí),它創(chuàng)建一個(gè)子進(jìn)程,其行為如同“父親”。在創(chuàng)建子進(jìn)程之前,先創(chuàng)建一個(gè)互斥的內(nèi)核對(duì)象,其行為對(duì)于子進(jìn)程來(lái)說(shuō),如同一個(gè)“自殺彈”。當(dāng)創(chuàng)建子進(jìn)程時(shí),就打開(kāi)了互斥體并在其他線程中進(jìn)行別的處理工作,同時(shí)等待著父進(jìn)程使用ReleaseMutex()API發(fā)出“死亡”信號(hào)。然后用Sleep()API調(diào)用來(lái)模擬父進(jìn)程處理其他工作,等完成時(shí),指令子進(jìn)程終止。當(dāng)調(diào)用ExitProcess()時(shí)要小心,進(jìn)程中的所有線程都被立刻通知停止。在設(shè)計(jì)應(yīng)用程序時(shí),必須讓主線程在正常的C++運(yùn)行期關(guān)閉(這是由編譯器
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)埋地管道重防腐靜電噴涂設(shè)備數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 統(tǒng)編版二年級(jí)語(yǔ)文下冊(cè)第八單元達(dá)標(biāo)測(cè)試卷(含答案)
- 上海市曹楊二中2024-2025學(xué)年高二上學(xué)期期末考試化學(xué)試卷(含答案)
- 遼寧省鞍山市高新區(qū)2024-2025學(xué)年九年級(jí)下學(xué)期開(kāi)學(xué)考試化學(xué)試題(含答案)
- 技校汽車底盤(pán)試題及答案
- 3 2025年耳鼻喉科相關(guān)疾病試題
- 色彩生命測(cè)試題及答案
- 遺產(chǎn)繼承分配方案合同
- 高等教育自學(xué)考試《00065國(guó)民經(jīng)濟(jì)統(tǒng)計(jì)概論》模擬試卷一
- 2025年度主管護(hù)師考試專項(xiàng)復(fù)習(xí)試題庫(kù)70題及答案(四)
- 2025年安徽工業(yè)經(jīng)濟(jì)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及答案參考
- 2025年安慶醫(yī)藥高等??茖W(xué)校單招職業(yè)適應(yīng)性考試題庫(kù)附答案
- 4.1 人要有自信(課件)-2024-2025學(xué)年道德與法治七年級(jí)下冊(cè) (統(tǒng)編版2024)
- 2025春季開(kāi)學(xué)第一課安全教育班會(huì)課件-
- 生物節(jié)律調(diào)節(jié)課件
- 不分手承諾書(shū)(2025版)戀愛(ài)忠誠(chéng)協(xié)議
- 2020-2025年中國(guó)國(guó)有控股公司行業(yè)發(fā)展趨勢(shì)及投資前景預(yù)測(cè)報(bào)告
- 病區(qū)8S管理成果匯報(bào)
- 2025年人教版七年級(jí)歷史下冊(cè)階段測(cè)試試卷含答案
- 林下經(jīng)濟(jì)中藥材種植基地建設(shè)項(xiàng)目可行性研究報(bào)告立項(xiàng)新版
- 急診預(yù)檢分診標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論