




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
實驗一:進程控制描述與控制[1]Windows“任務管理器”的進程管理實驗名稱Windows“任務管理器”的進程管理實驗目的通過在Windows任務管理器中對程序進程進行響應的管理操作,熟悉操作系統進程管理的概念,學習觀察操作系統運行的動態性能。實驗內容與步驟1.使用任務管理器終止進程2.顯示其他進程計數器3.更改正在運行的程序的優先級
啟動并進入Windows環境,單擊Ctrl+Alt+Del鍵,或者右鍵單擊任務欄,在快捷菜單中單擊“任務管理器”命令,打開“任務管理器”窗口。在本次實驗中,你使用的操作系統版本是:_______Windows_XP______________________當前機器中由你打開,正在運行的應用程序有:1)_______________2)___________實驗一___3)_________操作系統_____________4)___________百度首頁________5)____________68_______Windows“任務管理器”的窗口由____4__個選項卡組成,分別是:1)_______應用程序______________2)_進程__________________3)______性能___________________4)________聯網__________________當前“進程”選項卡顯示的欄目分別是(可移動窗口下方的游標/箭頭,或使窗口最大化進行觀察):1.使用任務管理器終止進程步驟1:單擊“進程”選項卡,一共顯示了__40___個進程。請試著區分一下,其中:系統(SYSTEM)進程有____25__個,填入表3-1中。
表3-1實驗記錄
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[]){//確定進程在列表中的位置intnClone(0);if(argc>1){//從第二個參數中提取克隆ID::sscanf(argv[1],“%d”,&nClone);}
//顯示進程位置std::cout<<“ProcessID:“<<::GetCurrentProcessId()<<“,CloneID:“<<nClone<<std::endl;
//檢查是否有創建子進程的需要constintc_nCloneMax=25;if(nClone<C_nCloneMax){//發送新進程的命令行和克隆號StartClone(++nClone);}//在終止之前暫停一下(l/2秒)::Sleep(500);
return0;}步驟4:單擊“Build”菜單中的“Compile3-5.cpp”命令,系統顯示: Thisbuildcommandrequiresanactiveprojectworkspace.Wouldyouliketo
createadefaultprojectworkspace? (build命令需要一個活動的項目工作空間。你是否希望建立一個缺省的
項目工作空間?)單擊“是”按鈕確認。系統對3-5.cpp進行編譯。步驟5:編譯完成后,單擊“Build”菜單中的“Build3-5.exe”命令,建立3-5.exe可執行文件。操作能否正常進行?如果不行,則可能的原因是什么?____不能正確運行,因為程序中出現了很多的語法和拼寫方面的錯誤__________________________________________________________步驟6:在工具欄單擊“ExecuteProgram”(執行程序)按鈕,或者按Ctrl+F5鍵,或者單擊“Build”菜單中的“Execute3-5.exe”命令,執行3-5.exe程序。步驟7:按Ctrl+S鍵可暫停程序的執行,按Ctrl+Pause(Break)鍵可終止程序的執行。清單3-5展示的是一個簡單的使用CreateProcess()API函數的例子。首先形成簡單的命令行,提供當前的EXE文件的指定文件名和代表生成克隆進程的號碼。大多數參數都可取缺省值,但是創建標志參數使用了:___________________CREATENEWCONSOLE_____________________________________標志,指示新進程分配它自己的控制臺,這使得運行示例程序時,在任務欄上產生許多活動標記。然后該克隆進程的創建方法關閉傳遞過來的句柄并返回main()函數。在關閉程序之前,每一進程的執行主線程暫停一下,以便讓用戶看到其中的至少一個窗口。CreateProcess()函數有____10____個核心參數?本實驗程序中設置的各個參數的值是:a.__szFilename_________________________________________;b.___szCmdLine_______________________________________;c.____NULL_______________________________________;d.____NULL______________________________________;e._____FALSE_______________________________________;f._____CREATE_NEW_CONSOLE_______________________________;g.____NULL_______________________________________;h.____NULL_______________________________________;i._____&si________________________________________;j._____&pi_______________________________________。程序運行時屏幕顯示的信息是:2.正在運行的進程本實驗的程序中列出了用于進程信息查詢的API函數GetProcessVersion()與GetVersionEx()的共同作用,可確定運行進程的操作系統的版本號。步驟8:在VisualC++窗口的工具欄中單擊“打開”按鈕,在“打開”對話框中找到并打開實驗源程序3-6.cpp。清單3-6使用進程和操作系統的版本信息//version項目#include<windows.h>#include<iostream>
//利用進程和操作系統的版本信息的簡單示例voidmain(){//提取這個進程的ID號DWORDdwIdThis=::GetCurrentProcessId();
//獲得這一進程和報告所需的版本,也可以發送0以便指明這一進程DWORDdwVerReq=::GetProcessVersion(dwIdThis);WORDwMajorReq=(WORD)dwVerReq>16);WORDwMinorReq=(WORD)dwVerReq&0xffff);std::cout<<“ProcessID:“<<dwIdThis<<“,requiresOS:“<<wMajorReq<<wMinorReq<<std
::endl
;
//設置版本信息的數據結構,以便保存操作系統的版本信息OSVERSIONINFOEXosvix;::ZeroMemory(&osvix,sizeof(osvix));osvix.dwOSVersionInfoSize=sizeof(osvix);
//提取版本信息和報告::GetVersionEx(reinterpret_cast<LPOSVERSIONINFO>(&osvix));std::cout<<“RunningonOS:“<<osvix.dwMajorVersion<<“.”<<osvix.dwMinorVersion<<std::endl;
//如果是NTS(WindowsServer2003)系統,則提高其優先權if(osvix.dwPlatformld==VER_PLATFORM_WIN32_NT&&osvix.dwMajorVersion>=5){//改變優先級::SetPriorityClass(::GetCurrentProcess(), //利用這一進程HIGH_PRIORITY_CLASS); //改變為high
//報告給用戶std::cout<<“TaskManagershouldnownowindicatethis”“processishighpriority.”<<std::endl;}}步驟9:單擊“Build”菜單中的“Compile3-6.cpp”命令,再單擊“是”按鈕確認。系統對3-6.cpp進行編譯。步驟10:編譯完成后,單擊“Build”菜單中的“Build3-6.exe”命令,建立3-6.exe可執行文件。 操作能否正常進行?如果不行,則可能的原因是什么?__不能正常運行,因為程序中出現許多語法和拼寫方面的錯誤_______________________________________________________________________________________________________________________________________________步驟11:在工具欄單擊“ExecuteProgram”(執行程序)按鈕,執行3-6.exe程序。運行結果:當前PID信息:___5310OS:00___________________________________當前操作系統版本:__6.1_____________________________________________________系統提示信息:_TaskManagershouldnownowindicatethisprocessishighpriority._____________________________________________________________________________清單3-6中的程序向讀者表明了如何獲得當前的PID和所需的進程版本信息。為了運行這一程序,系統處理了所有的版本不兼容問題。接著,程序演示了如何使用GetVersionEx()API函數來提取OSVERSIONINFOEX結構。這一數據塊中包括了操作系統的版本信息。其中,“OS:5.0”表示當前運行的操作系統是:________________WindowsServer2003_______________________________清單3-6的最后一段程序利用了操作系統的版本信息,以確認運行的是WindowsServer2003。代碼接著將當前進程的優先級提高到比正常級別高。步驟12:單擊Ctrl+Alt+Del鍵,進入“Windows任務管理器”,在“應用程序”選項卡中右鍵單擊“3-6”任務,在快捷菜單中選擇“轉到進程”命令。在“Windows任務管理器”的“進程”選項卡中,與“3-6”任務對應的進程映像名稱是(為什么?):_____________VCSPAWN.EXE___________________右鍵單擊該進程名,在快捷菜單中選擇“設置優先級”命令,可以調整該進程的優先級,如設置為“高”后重新運行3-6.exe程序,屏幕顯示有變化嗎?為什么?______PID信息變為4488OS:00_________________________________________________________________________________________________________________________________________________________________________除了改變進程的優先級以外,還可以對正在運行的進程執行幾項其他的操作,只要獲得其進程句柄即可。SetProcessAffinityMask()API函數允許開發人員將線程映射到處理器上;SetProcessPriorityBoost()API可關閉前臺應用程序優先級的提升;而SetProcessWorkingSet()API可調節進程可用的非頁面RAM的容量;還有一個只對當前進程可用的API函數,即SetProcessShutdownParameters(),可告訴系統如何終止該進程。3.終止進程在清單3-7列出的程序中,先創建一個子進程,然后指令它發出“自殺彈”互斥體去終止自身的運行。步驟13:在VisualC++窗口的工具欄中單擊“打開”按鈕,在“打開”對話框中找到并打開實驗源程序3-7.cpp。清單3-7指令其子進程來“殺掉”自己的父進程//procterm項目#include<windows.h>#include<iostream>#include<stdio.h>staticLPCTSTRg_szMutexName=“w2kdg.ProcTerm.mutex.Suicide”;
//創建當前進程的克隆進程的簡單方法voidStartClone(){//提取當前可執行文件的文件名TCHARszFilename[MAX_PATH];::GetModuleFileName(NULL,szFilename,MAX_PATH);
//格式化用于子進程的命令行,指明它是一個EXE文件和子進程TCHARszCmdLine[MAX_PATH];::sprintf(szCmdLine,“\”%s\“child”,szFilename);
//子進程的啟動信息結構STARTUPINFOsi;::ZeroMemory(reinterpret_cast<void*>(&si),sizeof(si));si.cb=sizeof(si); //應當是此結構的大小
//返回的用于子進程的進程信息PROCESS_INFORMATIONpi;
//用同樣的可執行文件名和命令行創建進程,并指明它是一個子進程BOOLbCreateOK=::CreateProcess(szFilename, //產生的應用程序名稱(本EXE文件)szCmdLine, //告訴我們這是一個子進程的標志NULL, //用于進程的缺省的安全性NULL, //用于線程的缺省安全性FALSE, //不繼承句柄CREATE_NEW_CONSOLE, //創建新窗口,使輸出更直觀NULL, //新環境NULL, //當前目錄&si, //啟動信息結構&pi); //返回的進程信息
//釋放指向子進程的引用if(bCreateOK){::CloseHandle(pi.hProcess);::CloseHandle(pi.hThread);}}voidParent(){//創建“自殺”互斥程序體HANDLEhMutexSuicide=::CreateMutex(NULL, //缺省的安全性TRUE, //最初擁有的g_szMutexName); //為其命名if(hMutexSuicide!=NULL){//創建子進程std::cout<<“Creatingthechildprocess.”<<std::endl;::StartClone();
//暫停::sleep(5000);
//指令子進程“殺”掉自身std::cout<<“Tellingthechildprocesstoquit.”<<std::endl;::ReleaseMutex(hMutexSuicide);
//消除句柄::CloseHandle(hMutexSuicide);}}
voidChild(){//打開“自殺”互斥體HANDLEhMutexSuicide=::OpenMutex(SYNCHRONIZE, //打開用于同步FALSE, //不需要向下傳遞g_szMutexName); //名稱if(hMutexSuicide!=NULL){//報告正在等待指令std::cout<<“Childwaitingforsuicideinstructions.”<<std::endl;::WaitForSingleObject(hMutexSuicide,INFINITE);
//準備好終止,清除句柄std::cout<<“Childquiting.”<<std::endl;::CloseHandle(hMutexSuicide);}}
intmain(intarqc,char*argv[]){//決定其行為是父進程還是子進程if(argc>l&&::strcmp(argv[l],“child”)==0){Child();}else{Parent();}return0;}清單3-7中的程序說明了一個進程從“生”到“死”的整個一生。第一次執行時,它創建一個子進程,其行為如同“父親”。在創建子進程之前,先創建一個互斥的內核對象,其行為對于子進程來說,如同一個“自殺彈”。當創建子進程時,就打開了互斥體并在其他線程中進行別的處理工作,同時等待著父進程使用ReleaseMutex()API發出“死亡”信號。然后用Sleep()API調用來模擬父進程處理其他工作,等完成時,指令子進程終止。當調用ExitProcess()時要小心,進程中的所有線程都被立刻通知停止。在設計應用程序時,必須讓主線程在正常的C++運行期關閉(這是由編譯器
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國網吧專用電腦項目創業計劃書
- 中國即食海蜇加工項目創業計劃書
- 中國雞翅項目創業計劃書
- 中國三葉漆屬項目創業計劃書
- 中國B超機項目創業計劃書
- 中國經濟藻項目創業計劃書
- 2025建筑工程專業分包勞務分包合同范本
- 湖北省農業項目創業計劃書
- 生活服務平臺個性化定制合同
- 安全禁區測試題目及答案
- 北京市海淀區2024-2025學年七年級下學期期中地理試題(解析版)
- 2025年中考押題預測卷:生物(福建卷01)(考試版)
- 人工智能提示詞工程師試題含答案
- 2025-2030中國風能風電行業市場深度調研及競爭格局與投資前景研究報告
- 人力資源管理2025年考試試卷及答案
- 安徽省合肥市廬江縣2023-2024學年七年級下學期6月期末數學試題
- DB31/T 920-2015產業園區服務規范
- 2025年大學輔導員招聘考試題庫:學生綜合素質評價體系與輔導員思想政治教育試題
- 2025年高純活性氧化鎂項目市場調查研究報告
- 個體商合伙協議書
- 商場消防設施管理與維護措施
評論
0/150
提交評論