版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
3.1Windows“任務(wù)管理器”的進(jìn)程管理(實(shí)驗(yàn)估計(jì)時(shí)間:60分鐘)
背景知識(shí)
實(shí)驗(yàn)?zāi)康?/p>
工具/準(zhǔn)備工作
實(shí)驗(yàn)內(nèi)容與步驟背景知識(shí)Windows2000的任務(wù)管理器提供了用戶計(jì)算機(jī)上正在運(yùn)行的程序和進(jìn)程的相關(guān)信息,也顯示了最常用的度量進(jìn)程性能的單位。使用任務(wù)管理器,可以打開(kāi)監(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)存使用情況、頁(yè)面錯(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)康耐ㄟ^(guò)在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)備工作在開(kāi)始本實(shí)驗(yàn)之前,請(qǐng)回顧教科書的相關(guān)內(nèi)容。需要準(zhǔn)備一臺(tái)運(yùn)行Windows2000Professional操作系統(tǒng)的計(jì)算機(jī)。實(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)版本是:_windowsXP當(dāng)前機(jī)器中由你打開(kāi),正在運(yùn)行的應(yīng)用程序有:1)實(shí)驗(yàn)一-microsoftword2)操作系統(tǒng)電子書3)Microsoftword_4)__5)__百度搜索—-qq空間-windowsinternet__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)___SGTool.exe_____________________________________________________2)__SogouCloud.exe__________________________________________________3)___taskmgr.exe______________________________________________4)____alg.exe_____________________________________________________5)_____ass.exe_______________________________________________________6)________comine.exe________________________________________________7)___jqs.exe_________________________________________________________8)______LMS.exe____________________________________________________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中。
映像名稱用戶名CPU內(nèi)存使用
Wmiprvse.exe
SYSTEM
00
5376k
cidaemon.exe
SYSTEM
00
300k
cidaemon.exe
SYSTEM00
856k
cidaemon.exe
SYSTEM
50
284k
cisvc.exe
SYSTEM
00
924k
csrss.exe
SYSTEM
00
7412k
mqtgsvc.exeSYSTEM
00
4144k
mqsvc.exe
SYSTEM
00
6632k
snmp.exe
SYSTEM
00
4340k
tcpservcs.exe
SYSTEM
00
3840k
Smss.exe
SYSTEM
00
404kSystem.exeSYSTEM00300kSystemIdleProcess.exeSYSTEM9928kwinlogon.exeSYSTEM001684kservices.exeSYSTEM005776klsass.exeSYSTEM001100ksvchost.exeSYSTEM005324kmDNSResponder.exeSYSTEM003920ksvchost.exeSYSTEM0018716kinetinfo.exeSYSTEM0010608ksamservice.exeSYSTEM002460kPGPserv.exeSYSTEM006880kPandoraService.exeSYSTEM009148kspoolsv.exeSYSTEM005688kMDM.exeSYSTEM003416k表3-1實(shí)驗(yàn)記錄
服務(wù)(SERVICE)進(jìn)程有___4___個(gè),填入表3-2中。
表3-2實(shí)驗(yàn)記錄映像名稱用戶名CPU內(nèi)存使用
Svchost.exe
NETWORKSERVICE
00
5692k
Sqlserver.exeNETWORKSERVICE
00
2628k
Svchost.exe
NETWORKSERVICE
00
4076k
Svchost.exeLOCALSERVICE00
4408k
用戶進(jìn)程有___12___個(gè),填入表3-3中。
表3-3實(shí)驗(yàn)記錄映像名稱用戶名CPU內(nèi)存使用
CCMClientNT.exe
Administrator
00
10468k
AdobeARM.exe
Administrator
00
10836k
Ctfmon.exeAdministrator
00
3576k
Conime.exe
Administrator00
3296k
WINWORD.exeAdministrator
0032428k
Explorer.exe
Administrator
00
34056k
Rundll32.exe
Administrator
00
6700k
HRMon.exe
Administrator
00
6072k
Ass.exe
Administrator
00
2408k
IEXPLORE.EXE
Administrator
02
300300k
Taskmgr.exe
Administrator
00
6148k
SGTool.exe
Administrator
00
13256k
提示:在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)程將沒(méi)有機(jī)會(huì)保存其狀態(tài)和數(shù)據(jù)。如果結(jié)束應(yīng)用程序,您將丟失未保存的數(shù)據(jù)。如果結(jié)束系統(tǒng)服務(wù),系統(tǒng)的某些部分可能無(wú)法正常工作。
終止進(jìn)程,將結(jié)束它直接或間接創(chuàng)建的所有子進(jìn)程。例如,如果終止了電子郵件程序(如Outlook98)的進(jìn)程樹,那么同時(shí)也終止了相關(guān)的進(jìn)程,如MAPI后臺(tái)處理程序mapisp32.exe。請(qǐng)將終止某進(jìn)程后的操作結(jié)果與原記錄數(shù)據(jù)對(duì)比,發(fā)生了什么:___________________BhkSvr.exeSYSTEM002792k_____________________________結(jié)束進(jìn)程后消失________________________________________________________________________________________________________________________________________________________________________________________2.顯示其他進(jìn)程記數(shù)器在“進(jìn)程”選項(xiàng)卡上單擊“查看”菜單,然后單擊“選擇列”命令。單擊要增加顯示為列標(biāo)題的項(xiàng)目,然后單擊“確定”。為對(duì)進(jìn)程列表進(jìn)行排序,可在“進(jìn)程”選項(xiàng)卡上單擊要根據(jù)其進(jìn)行排序的列標(biāo)題。而為了要反轉(zhuǎn)排序順序,可再次單擊列標(biāo)題。經(jīng)過(guò)調(diào)整,“進(jìn)程”選項(xiàng)卡現(xiàn)在顯示的項(xiàng)目分別是:__印像名稱用戶名CPU內(nèi)存使用USER…I/O寫…_______________________________________________________________________________________________________________________________________________通過(guò)對(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)。更改進(jìn)程的優(yōu)先級(jí)可以使其運(yùn)行更快或更慢(取決于是提升還是降低了優(yōu)先級(jí)),但也可能對(duì)其他進(jìn)程的性能有相反的影響。記錄操作后所體會(huì)的結(jié)果:__________本次試驗(yàn)總體較簡(jiǎn)單,但是有些煩雜但依然讓我學(xué)會(huì)了很多東西。___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________在多處理器計(jì)算機(jī)上,用戶還可以給處理器指派進(jìn)程,將程序或進(jìn)程的執(zhí)行限制在選定的處理器上,但這有可能導(dǎo)致總體性能的下降。
3.3Windows2000進(jìn)程的“一生”(實(shí)驗(yàn)估計(jì)時(shí)間:120分鐘)
背景知識(shí)
實(shí)驗(yàn)?zāi)康?/p>
工具/準(zhǔn)備工作
實(shí)驗(yàn)內(nèi)容與步驟
背景知識(shí)
1.創(chuàng)建進(jìn)程2.正在運(yùn)行的進(jìn)程3.終止進(jìn)程
Windows所創(chuàng)建的每個(gè)進(jìn)程都從調(diào)用CreateProcess()API函數(shù)開(kāi)始,該函數(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)行庫(kù)來(lái)說(shuō),這一調(diào)用發(fā)生在應(yīng)用程序的main()函數(shù)返回之后。1.創(chuàng)建進(jìn)程CreateProcess()調(diào)用的核心參數(shù)是可執(zhí)行文件運(yùn)行時(shí)的文件名及其命令行。表3-4詳細(xì)地列出了每個(gè)參數(shù)的類型和名稱。
表3-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ù);接下來(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)備好時(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è)參數(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)程使用主線程來(lái)指示它的存在。當(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ù)來(lái)查看,與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()來(lái)查看進(jìn)程的GUI資源。此函數(shù)既可返回指定進(jìn)程中的打開(kāi)的GUI對(duì)象的數(shù)目,也可返回指定進(jìn)程中打開(kāi)的USER對(duì)象的數(shù)目。進(jìn)程的其他性能信息可通過(guò)GetProcessIoCounters()、GetProcessPriorityBoost()、GetProcessTimes()和GetProcessWorkingSetSize()API得到。以上這幾個(gè)API函數(shù)都只需要具有PROCESS_QUERY_INFORMATION訪問(wèn)權(quán)限的指向所感興趣進(jìn)程的句柄。另一個(gè)可用于進(jìn)程信息查詢的API函數(shù)是GetProcessVersion()。此函數(shù)只需感興趣進(jìn)程的PID(進(jìn)程標(biāo)識(shí)號(hào))。本實(shí)驗(yàn)程序清單3-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é)”之后以正常的終止方式來(lái)調(diào)用前者的。而外部進(jìn)程通常調(diào)用后者即突然終止進(jìn)程的進(jìn)行,由于關(guān)閉時(shí)的途徑不太正常,有可能引起錯(cuò)誤的行為。TerminateProcess()API函數(shù)只要打開(kāi)帶有PROCESS_TERMINATE訪問(wèn)權(quán)的進(jìn)程對(duì)象,就可以終止進(jìn)程,并向系統(tǒng)返回指定的代碼。這是一種“野蠻”的終止進(jìn)程的方式,但是有時(shí)卻是需要的。如果開(kāi)發(fā)人員確實(shí)有機(jī)會(huì)來(lái)設(shè)計(jì)“謀殺”(終止別的進(jìn)程的進(jìn)程)和“受害”進(jìn)程(被終止的進(jìn)程)時(shí),應(yīng)該創(chuàng)建一個(gè)進(jìn)程間通訊的內(nèi)核對(duì)象——如一個(gè)互斥程序——這樣一來(lái),“受害”進(jìn)程只在等待或周期性地測(cè)試它是否應(yīng)該終止。實(shí)驗(yàn)?zāi)康?)通過(guò)創(chuàng)建進(jìn)程、觀察正在運(yùn)行的進(jìn)程和終止進(jìn)程的程序設(shè)計(jì)和調(diào)試操作,進(jìn)一步熟悉操作系統(tǒng)的進(jìn)程概念,理解Windows2000進(jìn)程的“一生”。2)通過(guò)閱讀和分析實(shí)驗(yàn)程序,學(xué)習(xí)創(chuàng)建進(jìn)程、觀察進(jìn)程和終止進(jìn)程的程序設(shè)計(jì)方法。工具/準(zhǔn)備工作在開(kāi)始本實(shí)驗(yàn)之前,請(qǐng)回顧教科書的相關(guān)內(nèi)容。需要做以下準(zhǔn)備:1)一臺(tái)運(yùn)行Windows2000Professional操作系統(tǒng)的計(jì)算機(jī)。2)計(jì)算機(jī)中需安裝VisualC++6.0專業(yè)版或企業(yè)版。實(shí)驗(yàn)內(nèi)容與步驟
1.創(chuàng)建進(jìn)程2.正在運(yùn)行的進(jìn)程3.終止進(jìn)程
請(qǐng)回答:Windows所創(chuàng)建的每個(gè)進(jìn)程都是以調(diào)用___________CreateProcess()_________API函數(shù)開(kāi)始和以調(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)入Windows2000Professional。步驟2:在“開(kāi)始”菜單中單擊“程序”-“MicrosoftVisualStudio6.0”–“MicrosoftVisualC++6.0”命令,進(jìn)入VisualC++窗口。步驟3:在工具欄單擊“打開(kāi)”按鈕,在“打開(kāi)”對(duì)話框中找到并打開(kāi)實(shí)驗(yàn)源程序3-5.cpp。清單3-5創(chuàng)建子進(jìn)程//proccreate項(xiàng)目#include<windows.h>#include<iostream>#include<stdio.h>//創(chuàng)建傳遞過(guò)來(lái)的進(jìn)程的克隆過(guò)程并賦于其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”菜單中的“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ǔ)法和拼寫方面的錯(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ù)使用了:_______________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)閉傳遞過(guò)來(lái)的句柄并返回main()函數(shù)。在關(guān)閉程序之前,每一進(jìn)程的執(zhí)行主線程暫停一下,以便讓用戶看到其中的至少一個(gè)窗口。CreateProcess()函數(shù)有________個(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的“命令提示符”狀態(tài)下嘗試執(zhí)行該程序,看看與在可視化界面下運(yùn)行的結(jié)果有沒(méi)有不同?為什么?
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(Windows2000)系統(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ǔ)法和拼寫方面的錯(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)是:___________________Windows2000_________________________________清單3-6的最后一段程序利用了操作系統(tǒng)的版本信息,以確認(rèn)運(yùn)行的是Windows2000。代碼接著將當(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<<“Childwaitingforsuicideinstruction
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年廣告創(chuàng)意設(shè)計(jì)委托合同
- 房屋貸款保險(xiǎn)合同模板
- 2024版農(nóng)村建房材料供應(yīng)協(xié)議
- 2024年個(gè)人租房合同范本
- 代理招商合同參考
- 兩家企業(yè)合作協(xié)議書格式
- 凈身出戶的離婚協(xié)議書應(yīng)注意啥
- 家庭住宅裝潢監(jiān)理合同范例
- 房屋買賣居間合同書標(biāo)準(zhǔn)格式
- 子女撫養(yǎng)權(quán)協(xié)議書中的主要內(nèi)容與要求
- 河北學(xué)考美術(shù)復(fù)習(xí)題
- 交談溝通禮儀課件
- 小學(xué)口語(yǔ)交際教學(xué)實(shí)驗(yàn)研究方案
- 精神病學(xué)簡(jiǎn)答題
- 火災(zāi)后建筑結(jié)構(gòu)鑒定標(biāo)準(zhǔn)cecs 252
- 班風(fēng)學(xué)風(fēng)主題班會(huì)課件
- 插花藝術(shù)基本知識(shí)
- 低等級(jí)農(nóng)村公路技術(shù)狀況評(píng)定指南
- 公務(wù)員考試行測(cè)答題卡
- 為未成年人利益保證書(抵押未成年人不動(dòng)產(chǎn))
- 肺心病(課)課件
評(píng)論
0/150
提交評(píng)論