![實(shí)驗(yàn)一-進(jìn)程控制描述與控制_第1頁](http://file4.renrendoc.com/view11/M00/06/34/wKhkGWWXQc6AD69xAAKZoNjsUkc887.jpg)
![實(shí)驗(yàn)一-進(jìn)程控制描述與控制_第2頁](http://file4.renrendoc.com/view11/M00/06/34/wKhkGWWXQc6AD69xAAKZoNjsUkc8872.jpg)
![實(shí)驗(yàn)一-進(jìn)程控制描述與控制_第3頁](http://file4.renrendoc.com/view11/M00/06/34/wKhkGWWXQc6AD69xAAKZoNjsUkc8873.jpg)
![實(shí)驗(yàn)一-進(jìn)程控制描述與控制_第4頁](http://file4.renrendoc.com/view11/M00/06/34/wKhkGWWXQc6AD69xAAKZoNjsUkc8874.jpg)
![實(shí)驗(yàn)一-進(jìn)程控制描述與控制_第5頁](http://file4.renrendoc.com/view11/M00/06/34/wKhkGWWXQc6AD69xAAKZoNjsUkc8875.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)一進(jìn)程控制描述與控制第一局部Windows“任務(wù)管理器〞的進(jìn)程管理背景知識(shí)Windows2000/XP/XP的任務(wù)管理器提供了用戶計(jì)算機(jī)上正在運(yùn)行的程序和進(jìn)程的相關(guān)信息,也顯示了最常用的度量進(jìn)程性能的單位。使用任務(wù)管理器,可以翻開監(jiān)視計(jì)算機(jī)性能的關(guān)鍵指示器,快速查看正在運(yùn)行的程序的狀態(tài),或者終止已停止響應(yīng)的程序。也可以使用多個(gè)參數(shù)評(píng)估正在運(yùn)行的進(jìn)程的活動(dòng),以及查看CPU和內(nèi)存使用情況的圖形和數(shù)據(jù)。其中:1)“應(yīng)用程序〞選項(xiàng)卡顯示正在運(yùn)行程序的狀態(tài),用戶能夠結(jié)束、切換或者啟動(dòng)程序。2)“進(jìn)程〞選項(xiàng)卡顯示正在運(yùn)行的進(jìn)程信息。例如,可以顯示關(guān)于CPU和內(nèi)存使用情況、頁面錯(cuò)誤、句柄計(jì)數(shù)以及許多其他參數(shù)的信息。3)“性能〞選項(xiàng)卡顯示計(jì)算機(jī)動(dòng)態(tài)性能,包括CPU和內(nèi)存使用情況的圖表,正在運(yùn)行的句柄、線程和進(jìn)程的總數(shù),物理、核心和認(rèn)可的內(nèi)存總數(shù)(KB)等。實(shí)驗(yàn)?zāi)康耐ㄟ^在Windows任務(wù)管理器中對(duì)程序進(jìn)程進(jìn)行響應(yīng)的管理操作,熟悉操作系統(tǒng)進(jìn)程管理的概念,學(xué)習(xí)觀察操作系統(tǒng)運(yùn)行的動(dòng)態(tài)性能。工具/準(zhǔn)備工作在開始本實(shí)驗(yàn)之前,請(qǐng)回憶教科書的相關(guān)內(nèi)容。需要準(zhǔn)備一臺(tái)運(yùn)行Windows2000/XP/XP操作系統(tǒng)的計(jì)算機(jī)。實(shí)驗(yàn)內(nèi)容與步驟\l"_1._使用任務(wù)管理器終止進(jìn)程#_1._使用任務(wù)管理器終止進(jìn)程"1.使用任務(wù)管理器終止進(jìn)程\l"_2._顯示其他進(jìn)程記數(shù)器#_2._顯示其他進(jìn)程記數(shù)器"2.顯示其他進(jìn)程計(jì)數(shù)器\l"_3._更改正在運(yùn)行的程序的優(yōu)先級(jí)#_3._更改正在運(yùn)行的程序的優(yōu)先級(jí)"3.更改正在運(yùn)行的程序的優(yōu)先級(jí)啟動(dòng)并進(jìn)入Windows環(huán)境,單擊Ctrl+Alt+Del鍵,或者右鍵單擊任務(wù)欄,在快捷菜單中單擊“任務(wù)管理器〞命令,或者是在點(diǎn)擊任務(wù)條上的“開始〞“運(yùn)行〞,并輸入“taskmgr.exe〞翻開“任務(wù)管理器〞窗口。在本次實(shí)驗(yàn)中,你使用的操作系統(tǒng)版本是:MicrosoftWindowsXPProfessional版本2002當(dāng)前機(jī)器中由你翻開,正在運(yùn)行的應(yīng)用程序有:1〕實(shí)驗(yàn)一進(jìn)程控制描述與控制34-MicrosoftWord2)我的電腦3)MicrosoftInternetExplorer4)__________________________________________________________________5)__________________________________________________________________Windows“任務(wù)管理器〞的窗口由_5_個(gè)選項(xiàng)卡組成,分別是:1)應(yīng)用程序________________________________________________2)進(jìn)程__________________________________________________________3)性能_____________________________________________________________4)聯(lián)網(wǎng)______________________________________________________________5)用戶_____________________________________________________________當(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è),填入表1-1中。表1-1實(shí)驗(yàn)記錄映像名稱用戶名CPU內(nèi)存使用
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
404kSystemSYSTEM00300kSystemIdleProcessSYSTEM9928kwinlogonSYSTEM001684kservicesSYSTEM005776klsassSYSTEM001100ksvchostSYSTEM005324kmDNSResponderSYSTEM003920ksvchostSYSTEM0018716kinetinfoSYSTEM0010608ksamserviceSYSTEM002460kPGPservSYSTEM006880kPandoraServiceSYSTEM009148kspoolsvSYSTEM005688kMDMSYSTEM003416k效勞(SERVICE)進(jìn)程有__5__個(gè),填入表1-2中。表1-2實(shí)驗(yàn)記錄映像名稱用戶名CPU內(nèi)存使用
Svchost
LOCALSERVICE
00
3996k
alg
LOCALSERVICE00
3960k
msdtc
NETWORKSERVICE
00
5228k
Svchost
NETWORKSERVICE
00
5048k
Svchost
NETWORKSERVICE
00
3888k
用戶進(jìn)程有___10__個(gè),填入表1-3中。表1-3實(shí)驗(yàn)記錄映像名稱用戶名CPU內(nèi)存使用
realsched
Administrator
00
356k
Bufmonitor
Administrator
00
2988k
Ctfmon
Administrator
00
3512k
NCClt.dll
Administrator
00
9932k
LenRCClient
Administrator
00
4588k
PGPtray
Administrator
00
15100k
SogouCloud
Administrator
00
4920kExplorerAdministrator0010436kTaskmgrAdministrator002708kWINWORDAdministrator0071188k提示:在WindowsXP的“任務(wù)管理器〞中,“進(jìn)程〞選項(xiàng)卡增加了一個(gè)“用戶名〞欄目,其中區(qū)分了SYSTEM、NETWORKSERVICE、LOCALSERVICE和用戶的不同進(jìn)程類別。步驟2:?jiǎn)螕粢K止的進(jìn)程,然后單擊“結(jié)束進(jìn)程〞按鈕。注意:終止進(jìn)程時(shí)要小心。終止進(jìn)程有可能導(dǎo)致不希望發(fā)生的結(jié)果,包括數(shù)據(jù)喪失和系統(tǒng)不穩(wěn)定等。因?yàn)樵诒唤K止前,進(jìn)程將沒有時(shí)機(jī)保存其狀態(tài)和數(shù)據(jù)。如果結(jié)束應(yīng)用程序,您將喪失未保存的數(shù)據(jù)。如果結(jié)束系統(tǒng)效勞,系統(tǒng)的某些局部可能無法正常工作。以下是在windows7旗艦版下完成的終止進(jìn)程,將結(jié)束它直接或間接創(chuàng)立的所有子進(jìn)程。例如,如果終止了電子郵件程序(如Outlook8)的進(jìn)程樹,那么同時(shí)也終止了相關(guān)的進(jìn)程,如MAPI后臺(tái)處理程序mapisp32.exe。請(qǐng)將終止某進(jìn)程后的操作結(jié)果與原記錄數(shù)據(jù)比照,發(fā)生了什么:____結(jié)束QQ.exe進(jìn)程后,進(jìn)程QQExternal.exe也會(huì)結(jié)束。_________________________________________________________________________________________________________________________________________________________________________________________________________________________從桌面啟動(dòng)辦公軟件“Word〞,在任務(wù)管理器中找到該軟件的登記,并將其結(jié)束掉。再從任務(wù)管理器中分別找到以下程序:winlogon.exe、lsass.exe、csrss.exe、smss.exe,試著結(jié)束它們,觀察到的反響是任務(wù)管理器無法結(jié)束進(jìn)程,原因是該進(jìn)程為關(guān)鍵系統(tǒng)進(jìn)程。在任務(wù)管理器中找到進(jìn)程“explorer.exe〞,將之結(jié)束掉,并將桌面上你翻開的所有窗口最小化,看看你的計(jì)算機(jī)系統(tǒng)起來什么樣的變化桌面圖標(biāo)變?yōu)榭瞻住⒌玫降慕Y(jié)論是explorer.exe進(jìn)程是windows資源管理器進(jìn)程,是Windows圖形界面外殼程序〔說出explorer.exe進(jìn)程的作用〕。2.顯示其他進(jìn)程記數(shù)器在“進(jìn)程〞選項(xiàng)卡上單擊“查看〞菜單,然后單擊“選擇列〞命令。單擊要增加顯示為列標(biāo)題的工程,然后單擊“確定〞。為對(duì)進(jìn)程列表進(jìn)行排序,可在“進(jìn)程〞選項(xiàng)卡上單擊要根據(jù)其進(jìn)行排序的列標(biāo)題。而為了要反轉(zhuǎn)排序順序,可再次單擊列標(biāo)題。經(jīng)過調(diào)整,“進(jìn)程〞選項(xiàng)卡現(xiàn)在顯示的工程分別是:____映像名稱、PID、用戶名、回話ID、CPU、CPU時(shí)間、工作設(shè)置(內(nèi)存)、峰值工作設(shè)置(內(nèi)存)、工作設(shè)置增量(內(nèi)存)、內(nèi)存〔專用工作集〕、I/O讀取、I/O寫入、命令行、描述通過對(duì)“查看〞菜單的選擇操作,可以在“任務(wù)管理器〞中更改顯示選項(xiàng):·在“應(yīng)用程序〞選項(xiàng)卡上,可以按詳細(xì)信息、大圖標(biāo)或小圖標(biāo)查看?!ぴ凇靶阅塄曔x項(xiàng)卡上,可以更改CPU記錄圖,并顯示內(nèi)核時(shí)間?!帮@示內(nèi)核時(shí)間〞選項(xiàng)在“CPU使用〞和“CPU使用記錄〞圖表上添加紅線。紅線指示內(nèi)核操作占用的CPU資源數(shù)量。3.更改正在運(yùn)行的程序的優(yōu)先級(jí)要查看正在運(yùn)行的程序的優(yōu)先級(jí),可單擊“進(jìn)程〞選項(xiàng)卡,單擊“查看〞菜單,單擊“選擇列〞-“根本優(yōu)先級(jí)〞命令,然后單擊“確定〞按鈕。為更改正在運(yùn)行的程序的優(yōu)先級(jí),可在“進(jìn)程〞選項(xiàng)卡上右鍵單擊您要更改的程序,指向“設(shè)置優(yōu)先級(jí)〞,然后單擊所需的選項(xiàng)。更改良程的優(yōu)先級(jí)可以使其運(yùn)行更快或更慢(取決于是提升還是降低了優(yōu)先級(jí)),但也可能對(duì)其他進(jìn)程的性能有相反的影響。記錄操作后所體會(huì)的結(jié)果:_______改變進(jìn)程的優(yōu)先級(jí)可能會(huì)使系統(tǒng)不穩(wěn)定________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________在多處理器計(jì)算機(jī)上,用戶還可以給處理器指派進(jìn)程,將程序或進(jìn)程的執(zhí)行限制在選定的處理器上,但這有可能導(dǎo)致總體性能的下降。\l"_top#_top"第二局部Windows2000/XP進(jìn)程控制背景知識(shí)\l"_1._創(chuàng)立進(jìn)程#_1._創(chuàng)立進(jìn)程"1.創(chuàng)立進(jìn)程\l"_2._正在運(yùn)行的進(jìn)程#_2._正在運(yùn)行的進(jìn)程"2.正在運(yùn)行的進(jìn)程\l"_3._終止進(jìn)程#_3._終止進(jìn)程"3.終止進(jìn)程Windows所創(chuàng)立的每個(gè)進(jìn)程都從調(diào)用CreateProcess()API函數(shù)開始,該函數(shù)的任務(wù)是在對(duì)象管理器子系統(tǒng)內(nèi)初始化進(jìn)程對(duì)象。每一進(jìn)程都以調(diào)用ExitProcess()或TerminateProcess()API函數(shù)終止。通常應(yīng)用程序的框架負(fù)責(zé)調(diào)用ExitProcess()函數(shù)。對(duì)于C++運(yùn)行庫來說,這一調(diào)用發(fā)生在應(yīng)用程序的main()函數(shù)返回之后。1.創(chuàng)立進(jìn)程CreateProcess()調(diào)用的核心參數(shù)是可執(zhí)行文件運(yùn)行時(shí)的文件名及其命令行。表1-4詳細(xì)地列出了每個(gè)參數(shù)的類型和名稱。表1-4CreateProcess()函數(shù)的參數(shù)參數(shù)名稱使用目的LPCTSTRlpApplivationName全部或局部地指明包括可執(zhí)行代碼的EXE文件的文件名LPCTSTRlpCommandLine向可執(zhí)行文件發(fā)送的參數(shù)LPSECURIITY_ATTRIBUTESlpProcessAttributes返回進(jìn)程句柄的平安屬性。主要指明這一句柄是否應(yīng)該由其他子進(jìn)程所繼承LPSECURIITY_ATTRIBUTESlpThreadAttributes返回進(jìn)程的主線程的句柄的平安屬性BOOLbInheritHandle一種標(biāo)志,告訴系統(tǒng)允許新進(jìn)程繼承創(chuàng)立者進(jìn)程的句柄DWORDdwCreationFlage特殊的創(chuàng)立標(biāo)志(如CREATE_SUSPENDED)的位標(biāo)記LPVOIDlpEnvironment向新進(jìn)程發(fā)送的一套環(huán)境變量;如為null值那么發(fā)送調(diào)用者環(huán)境LPCTSTRlpCurrentDirectory新進(jìn)程的啟動(dòng)目錄STARTUPINFOlpStartupInfoSTARTUPINFO結(jié)構(gòu),包括新進(jìn)程的輸入和輸出配置的詳情L(zhǎng)PPROCESS_INFORMATIONlpProcessInformation調(diào)用的結(jié)果塊;發(fā)送新應(yīng)用程序的進(jìn)程和主線程的句柄和ID可以指定第一個(gè)參數(shù),即應(yīng)用程序的名稱,其中包括相對(duì)于當(dāng)前進(jìn)程的當(dāng)前目錄的全路徑或者利用搜索方法找到的路徑;lpCommandLine參數(shù)允許調(diào)用者向新應(yīng)用程序發(fā)送數(shù)據(jù);接下來的三個(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)備好時(shí),應(yīng)該使用ResumeThread()API來啟動(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)程來說,給此進(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è)參數(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)程終止之前的任何未釋放的資源。2.正在運(yùn)行的進(jìn)程如果一個(gè)進(jìn)程擁有至少一個(gè)執(zhí)行線程,那么為正在系統(tǒng)中運(yùn)行的進(jìn)程。通常,這種進(jìn)程使用主線程來指示它的存在。當(dāng)主線程結(jié)束時(shí),調(diào)用ExitProcess()API函數(shù),通知系統(tǒng)終止它所擁有的所有正在運(yùn)行、準(zhǔn)備運(yùn)行或正在掛起的其他線程。當(dāng)進(jìn)程正在運(yùn)行時(shí),可以查看它的許多特性,其中少數(shù)特性也允許加以修改。首先可查看的進(jìn)程特性是系統(tǒng)進(jìn)程標(biāo)識(shí)符(PID),可利用GetCurrentProcessId()API函數(shù)來查看,與GetCurrentProcess()相似,對(duì)該函數(shù)的調(diào)用不能失敗,但返回的PID在整個(gè)系統(tǒng)中都可使用。其他的可顯示當(dāng)前進(jìn)程信息的API函數(shù)還有GetStartupInfo()和GetProcessShutdownParameters(),可給出進(jìn)程存活期內(nèi)的配置詳情。通常,一個(gè)進(jìn)程需要它的運(yùn)行期環(huán)境的信息。例如API函數(shù)GetModuleFileName()和GetCommandLine(),可以給出用在CreateProcess()中的參數(shù)以啟動(dòng)應(yīng)用程序。在創(chuàng)立應(yīng)用程序時(shí)可使用的另一個(gè)API函數(shù)是IsDebuggerPresent()??衫肁PI函數(shù)GetGuiResources()來查看進(jìn)程的GUI資源。此函數(shù)既可返回指定進(jìn)程中的翻開的GUI對(duì)象的數(shù)目,也可返回指定進(jìn)程中翻開的USER對(duì)象的數(shù)目。進(jìn)程的其他性能信息可通過GetProcessIoCounters()、GetProcessPriorityBoost()、GetProcessTimes()和GetProcessWorkingSetSize()API得到。以上這幾個(gè)API函數(shù)都只需要具有PROCESS_QUERY_INFORMATION訪問權(quán)限的指向所感興趣進(jìn)程的句柄。另一個(gè)可用于進(jìn)程信息查詢的API函數(shù)是GetProcessVersion()。此函數(shù)只需感興趣進(jìn)程的PID(進(jìn)程標(biāo)識(shí)號(hào))。本實(shí)驗(yàn)程序清單1-6中列出了這一API函數(shù)與GetVersionEx()的共同作用,可確定運(yùn)行進(jìn)程的系統(tǒng)的版本號(hào)。3.終止進(jìn)程所有進(jìn)程都是以調(diào)用ExitProcess()或者TerminateProcess()函數(shù)結(jié)束的。但最好使用前者而不要使用后者,因?yàn)檫M(jìn)程是在完成了它的所有的關(guān)閉“職責(zé)〞之后以正常的終止方式來調(diào)用前者的。而外部進(jìn)程通常調(diào)用后者即突然終止進(jìn)程的進(jìn)行,由于關(guān)閉時(shí)的途徑不太正常,有可能引起錯(cuò)誤的行為。TerminateProcess()API函數(shù)只要翻開帶有PROCESS_TERMINATE訪問權(quán)的進(jìn)程對(duì)象,就可以終止進(jìn)程,并向系統(tǒng)返回指定的代碼。這是一種“野蠻〞的終止進(jìn)程的方式,但是有時(shí)卻是需要的。如果開發(fā)人員確實(shí)有時(shí)機(jī)來設(shè)計(jì)“謀殺〞(終止別的進(jìn)程的進(jìn)程)和“受害〞進(jìn)程(被終止的進(jìn)程)時(shí),應(yīng)該創(chuàng)立一個(gè)進(jìn)程間通訊的內(nèi)核對(duì)象——如一個(gè)互斥程序——這樣一來,“受害〞進(jìn)程只在等待或周期性地測(cè)試它是否應(yīng)該終止。實(shí)驗(yàn)?zāi)康?)通過創(chuàng)立進(jìn)程、觀察正在運(yùn)行的進(jìn)程和終止進(jìn)程的程序設(shè)計(jì)和調(diào)試操作,進(jìn)一步熟悉操作系統(tǒng)的進(jìn)程概念,理解Windows2000/XP進(jìn)程的“一生〞。2)通過閱讀和分析實(shí)驗(yàn)程序,學(xué)習(xí)創(chuàng)立進(jìn)程、觀察進(jìn)程和終止進(jìn)程的程序設(shè)計(jì)方法。工具/準(zhǔn)備工作在開始本實(shí)驗(yàn)之前,請(qǐng)回憶教科書的相關(guān)內(nèi)容。需要做以下準(zhǔn)備:1)一臺(tái)運(yùn)行Windows2000/XPProfessional操作系統(tǒng)的計(jì)算機(jī)。2)計(jì)算機(jī)中需安裝VisualC++6.0專業(yè)版或企業(yè)版。實(shí)驗(yàn)內(nèi)容與步驟\l"_1._創(chuàng)立進(jìn)程_1#_1._創(chuàng)立進(jìn)程_1"1.創(chuàng)立進(jìn)程\l"_2._正在運(yùn)行的進(jìn)程_1#_2._正在運(yùn)行的進(jìn)程_1"2.正在運(yùn)行的進(jìn)程\l"_3._終止進(jìn)程#_3._終止進(jìn)程"3.終止進(jìn)程請(qǐng)答復(fù):Windows所創(chuàng)立的每個(gè)進(jìn)程都是以調(diào)用______CreateProcess()____API函數(shù)開始和以調(diào)用______ExitProcess()_____或_____TerminateProcess()___API函數(shù)終止。1.創(chuàng)立進(jìn)程本實(shí)驗(yàn)顯示了創(chuàng)立子進(jìn)程的根本框架。該程序只是再一次地啟動(dòng)自身,顯示它的系統(tǒng)進(jìn)程ID和它在進(jìn)程列表中的位置。步驟1:登錄進(jìn)入Windows2000/XPProfessional。步驟2:在“開始〞菜單中單擊“程序〞-“MicrosoftVisualStudio6.0”–“MicrosoftVisualC++6.0”命令,進(jìn)入步驟3:在工具欄單擊“翻開〞按鈕,在“翻開〞對(duì)話框中找到并翻開實(shí)驗(yàn)源程序1-5.cpp。清單1-5創(chuàng)立子進(jìn)程//proccreate工程#include<windows.h>#include<iostream>#include<stdio.h>//創(chuàng)立傳遞過來的進(jìn)程的克隆過程并賦于其ID值voidStartClone(intnCloneID){//提取用于當(dāng)前可執(zhí)行文件的文件名TCHARszFilename[MAX_PATH];::GetModuleFileName(NULL,szFilename,MAX_PATH);//格式化用于子進(jìn)程的命令行并通知其EXE文件名和克隆IDTCHARszCmdLine[MAX_PATH];::sprintf(szCmdLine,“\〞%s\〞%d〞,szFilename,nCloneID);//用于子進(jìn)程的STARTUPINFO結(jié)構(gòu)STARTUPINFOsi;::ZeroMemory(reinterpret_cast<void*>(&si),sizeof(si));si.cb=sizeof(si); //必須是本結(jié)構(gòu)的大小//返回的用于子進(jìn)程的進(jìn)程信息PROCESS_INFORMATIONpi;//利用同樣的可執(zhí)行文件和命令行創(chuàng)立進(jìn)程,并賦于其子進(jìn)程的性質(zhì)BOOLbCreateOK=::CreateProcess(szFilename, //產(chǎn)生這個(gè)EXE的應(yīng)用程序的名稱szCmdLine, //告訴其行為像一個(gè)子進(jìn)程的標(biāo)志NULL, //缺省的進(jìn)程平安性NULL, //缺省的線程平安性FALSE, //不繼承句柄CREATE_NEW_CONSOLE, //使用新的控制臺(tái)NULL, //新的環(huán)境NULL, //當(dāng)前目錄&si, //啟動(dòng)信息&pi); //返回的進(jìn)程信息//對(duì)子進(jìn)程釋放引用if(bCreateOK){::CloseHandle(pi.hProcess);::CloseHandle(pi.hThread);}}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〞菜單中的“Compile1-5.cpp〞命令,系統(tǒng)顯示: Thisbuildcommandrequiresanactiveprojectworkspace.Wouldyouliketo
createadefaultprojectworkspace? (build命令需要一個(gè)活動(dòng)的工程工作空間。你是否希望建立一個(gè)缺省的工程工作空間?)單擊“是〞按鈕確認(rèn)。系統(tǒng)對(duì)1-5.cpp進(jìn)行編譯。步驟5:編譯完成后,單擊“Build〞菜單中的“Build1-5.exe〞命令,建立1-5.exe可執(zhí)行文件。操作能否正常進(jìn)行?如果不行,那么可能的原因是什么?_______不能正常運(yùn)行,因?yàn)槌绦蛑谐霈F(xiàn)許多語法和拼寫方面的錯(cuò)誤______________步驟6:在工具欄單擊“ExecuteProgram〞(執(zhí)行程序)按鈕,或者按Ctrl+F5鍵,或者單擊“Build〞菜單中的“Execute1-5.exe〞命令,執(zhí)行1-5.exe程序。步驟7:按Ctrl+S鍵可暫停程序的執(zhí)行,按Ctrl+Pause(Break)鍵可終止程序的執(zhí)行。清單1-5展示的是一個(gè)簡(jiǎn)單的使用CreateProcess()API函數(shù)的例子。首先形成簡(jiǎn)單的命令行,提供當(dāng)前的EXE文件的指定文件名和代表生成克隆進(jìn)程的號(hào)碼。大多數(shù)參數(shù)都可取缺省值,但是創(chuàng)立標(biāo)志參數(shù)使用了:_______CREATE_NEW_CONSOLE____________________________________標(biāo)志,指示新進(jìn)程分配它自己的控制臺(tái),這使得運(yùn)行例如程序時(shí),在任務(wù)欄上產(chǎn)生許多活動(dòng)標(biāo)記。然后該克隆進(jìn)程的創(chuàng)立方法關(guān)閉傳遞過來的句柄并返回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í)屏幕顯示的信息是:提示:局部程序在VisualC++環(huán)境完成編譯、鏈接之后,還可以在Windows2000/XP的“命令提示符〞狀態(tài)下嘗試執(zhí)行該程序,看看與在可視化界面下運(yùn)行的結(jié)果有沒有不同?為什么?2.正在運(yùn)行的進(jìn)程本實(shí)驗(yàn)的程序中列出了用于進(jìn)程信息查詢的API函數(shù)GetProcessVersion()與GetVersionEx()的共同作用,可確定運(yùn)行進(jìn)程的操作系統(tǒng)的版本號(hào)。步驟8:在VisualC++窗口的工具欄中單擊“翻開〞按鈕,在“翻開〞對(duì)話框中找到并翻開實(shí)驗(yàn)源程序1-6.cpp。清單1-6使用進(jìn)程和操作系統(tǒng)的版本信息//version工程#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(Windows2000/XP)系統(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〞菜單中的“Compile1-6.cpp〞命令,再單擊“是〞按鈕確認(rèn)。系統(tǒng)對(duì)1-6.cpp進(jìn)行編譯。步驟10:編譯完成后,單擊“Build〞菜單中的“Build1-6.exe〞命令,建立1-6.exe可執(zhí)行文件。操作能否正常進(jìn)行?如果不行,那么可能的原因是什么?_______不能正常運(yùn)行,因?yàn)槌绦蛑谐霈F(xiàn)許多語法和拼寫方面的錯(cuò)誤______________________________________________________________________________________步驟11:在工具欄單擊“ExecuteProgram〞(執(zhí)行程序)按鈕,執(zhí)行1-6.exe程序。運(yùn)行結(jié)果:當(dāng)前PID信息:______5310OS:00________________________________________當(dāng)前操作系統(tǒng)版本:___6.1__________________________________________系統(tǒng)提示信息:_____TaskManagershouldnownowindicatethisprocessishighpriority.________________________________________________________________________清單1-6中的程序向讀者說明了如何獲得當(dāng)前的PID和所需的進(jìn)程版本信息。為了運(yùn)行這一程序,系統(tǒng)處理了所有的版本不兼容問題。接著,程序演示了如何使用GetVersionEx()API函數(shù)來提取OSVERSIONINFOEX結(jié)構(gòu)。這一數(shù)據(jù)塊中包括了操作系統(tǒng)的版本信息。其中,“OS:5.0”________________Windows2000________________________________清單1-6的最后一段程序利用了操作系統(tǒng)的版本信息,以確認(rèn)運(yùn)行的是Windows2000/XP。代碼接著將當(dāng)前進(jìn)程的優(yōu)先級(jí)提高到比正常級(jí)別高。步驟12:?jiǎn)螕鬋trl+Alt+Del鍵,進(jìn)入“Windows任務(wù)管理器〞,在“應(yīng)用程序〞選項(xiàng)卡中右鍵單擊“1-6〞任務(wù),在快捷菜單中選擇“轉(zhuǎn)到進(jìn)程〞命令。在“Windows任務(wù)管理器〞的“進(jìn)程〞選項(xiàng)卡中,與“1-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)行1-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ù)允許開發(fā)人員將線程映射到處理器上;SetProcessPriorityBoost()API可關(guān)閉前臺(tái)應(yīng)用程序優(yōu)先級(jí)的提升;而SetProcessWorkingSet()API可調(diào)節(jié)進(jìn)程可用的非頁面RAM的容量;還有一個(gè)只對(duì)當(dāng)前進(jìn)程可用的API函數(shù),即SetProcessShutdownParameters(),可告訴系統(tǒng)如何終止該進(jìn)程。3.終止進(jìn)程在清單1-7列出的程序中,先創(chuàng)立一個(gè)子進(jìn)程,然后指令它發(fā)出“自殺彈〞互斥體去終止自身的運(yùn)行。步驟13:在VisualC++窗口的工具欄中單擊“翻開〞按鈕,在“翻開〞對(duì)話框中找到并翻開實(shí)驗(yàn)源程序1-7.cpp。清單1-7指令其子進(jìn)程來“殺掉〞自己的父進(jìn)程//procterm工程#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(){//翻開“自殺〞互斥體HANDLEhMutexSuicide=::OpenMutex(SYNCHRONIZE, //翻開用于同步FALSE, //不需要向下傳遞g_szMutexName); //名稱if(hMutexSuicide!=NULL){//報(bào)告正在等待指令std::cout<<“Childwaitingforsuicideinstructions.〞<<std::endl;::WaitForSingleObject(hMutexSuicide,INFINITE);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度紅木家具品牌授權(quán)合同及清單
- 二零二五年度父母無償贈(zèng)與子女房產(chǎn)并約定維修責(zé)任協(xié)議
- 二零二五年度新能源儲(chǔ)能技術(shù)融資合同
- 施工現(xiàn)場(chǎng)施工防突發(fā)公共衛(wèi)生事件制度
- 施工單位關(guān)于協(xié)調(diào)配合的聯(lián)絡(luò)函
- 雨雪天氣的應(yīng)急預(yù)案
- 《運(yùn)營(yíng)管理 第7版》課件-chapt.05-選址與設(shè)施布置
- DB6528T 201-2024計(jì)量檢定校準(zhǔn)服務(wù)規(guī)范
- 個(gè)體工商戶合伙創(chuàng)業(yè)合同書及細(xì)則
- 臨時(shí)勞動(dòng)合同終止模板
- 2025保安部年度工作計(jì)劃
- 2024年江蘇經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫
- 人居環(huán)境綜合治理項(xiàng)目項(xiàng)目背景及必要性分析
- 招標(biāo)采購基礎(chǔ)知識(shí)培訓(xùn)
- 2024年廣東省公務(wù)員錄用考試《行測(cè)》試題及答案解析
- 電力系統(tǒng)分布式模型預(yù)測(cè)控制方法綜述與展望
- 2024年注冊(cè)建筑師-二級(jí)注冊(cè)建筑師考試近5年真題附答案
- 2024年貴州省中考理科綜合試卷(含答案)
- 無人機(jī)技術(shù)與遙感
- 燃煤電廠超低排放煙氣治理工程技術(shù)規(guī)范(HJ 2053-2018)
- TSG-T7001-2023電梯監(jiān)督檢驗(yàn)和定期檢驗(yàn)規(guī)則宣貫解讀
評(píng)論
0/150
提交評(píng)論