版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、操作系統(tǒng) 實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)序號(hào):4實(shí)驗(yàn)項(xiàng)目名稱:進(jìn)程控制學(xué)號(hào)1207122219姓名鄺沃佳專業(yè)、班軟金二班實(shí)驗(yàn)地點(diǎn)1-418指導(dǎo)教師李遠(yuǎn)敏實(shí)驗(yàn)時(shí)間2014/10/21一、 實(shí)驗(yàn)?zāi)康募耙螅?) 通過對(duì)WindowsXP進(jìn)行編程,來(lái)熟悉和了解系統(tǒng)。(2) 通過分析程序,來(lái)了解進(jìn)程的創(chuàng)建、終止。二、實(shí)驗(yàn)設(shè)備(環(huán)境)及要求(1) 一臺(tái)WindowsXP操作系統(tǒng)的計(jì)算機(jī)。(2) 計(jì)算機(jī)裝有Microsoft Visual Studio C+6.0專業(yè)版或企業(yè)版。(3) ·CreateProcess()調(diào)用:創(chuàng)建一個(gè)進(jìn)程。(4) ·ExitProcess()調(diào)用:終止一個(gè)進(jìn)程。三、實(shí)驗(yàn)內(nèi)
2、容與步驟(1)編程一 利用CreateProcess()函數(shù)創(chuàng)建一個(gè)子進(jìn)程并且裝入畫圖程序(mspaint.exe)。閱讀該程序,完成實(shí)驗(yàn)任務(wù)。源程序如下: # include < stdio.h > # include < windows.h > int main(VOID) STARTUPINFO si; PROCESS INFORMATION pi; ZeroMemory(&si,sizeof(si); Si.cb=sizeof(si); ZeroMemory(&pi,sizeof(pi); if(!CreateProcess(NULL, “c:
3、WINDOWSsystem32 mspaint.exe”, NULL, NULL, FALSE, 0, NULL, NULL, &si,&pi) fprintf(stderr,”Creat Process Failed”);return 1;WaitForSingleObject(pi.hProcess,INFINITE);Printf(“child Complete”);CloseHandle(pi.hProcess);CloseHandle(pi hThread); 修改后:#include <stdio.h>#include <windows.h>
4、int main(VOID) STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si,sizeof(si);si.cb=sizeof(si);ZeroMemory(&pi,sizeof(pi);if(!CreateProcess(NULL,"c:WINDOWSsystem32mspaint.exe", NULL,NULL,FALSE,0,NULL, NULL,&si,&pi)fprintf(stderr,"Creat Process Failed");return -1;
5、WaitForSingleObject(pi.hProcess,INFINITE);printf("child Complete");CloseHandle(pi.hProcess);CloseHandle(pi.hThread); 在“命令提示符”窗口運(yùn)行CL命令產(chǎn)生可執(zhí)行程序4-1.exe: C: >CL 4-1.cpp 實(shí)驗(yàn)任務(wù):寫出程序的運(yùn)行結(jié)果。 4正在運(yùn)行的進(jìn)程 (2)、編程二 下面給出了一個(gè)使用進(jìn)程和操作系統(tǒng)版本信息應(yīng)用程序(文件名為4-5.cpp)。它利用進(jìn)程信息查詢的API函數(shù)GetProcessVersion()與GetVersionEx()的共同
6、作用。確定運(yùn)行進(jìn)程的操作系統(tǒng)版本號(hào)。閱讀該程序并完成實(shí)驗(yàn)任務(wù)。 #include<windows.h> #include<iostream>/利用進(jìn)程和操作系統(tǒng)的版本信息的簡(jiǎn)單示例Void main() /提取這個(gè)進(jìn)程的ID號(hào) DWORD dwIdThis=:GetCurrentProcessId(); /獲得這一進(jìn)程和報(bào)告所需的版本,也可以發(fā)送0以便指明這一進(jìn)程DWORD dwVerReq=:GetProcessVersion(dwIdThis);WORD wMajorReq=:(WORD)dwVerReq>16);WORD wMinorReq=:(WORD)d
7、wVerReq & oxffff);std:cout< <”Process ID:”< <dwIdThis < <”,requires OS:”< <wMajorReq< <wMinorReq< <std:endl;/設(shè)置版本信息的數(shù)據(jù)結(jié)構(gòu),以便保存操作系統(tǒng)的版本信息OSVERSIONINFOEX osvix;:ZeroMemory(&osvix,sizeof(osvix);Osvix.dwOSVersionInfoSize=sizeof(osvix);/提取版本信息和報(bào)告:GetVersionEx(rei
8、nterpret cast<LPOSVERSIONINFO>(&osvix);Std:cout< <”Running on OS:”< <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í):SerPriorit
9、yClass(:GetCurrentProcess() /利用這一進(jìn)程 HIGH PRIORITY CLASS); /改變?yōu)閔igh/報(bào)告給用戶Std:cout< <”Task Manager should now now indicate this” “process is high priority.”< <std:endl;修改后:#include<windows.h>#include<iostream>/利用進(jìn)程和操作系統(tǒng)的版本信息的簡(jiǎn)單示例void main()/提取這個(gè)進(jìn)程的ID號(hào)DWORD dwIdThis=:GetCurrentP
10、rocessId();/獲得這一進(jìn)程和報(bào)告所需的版本,也可以發(fā)送0以便指明這一進(jìn)程DWORD dwVerReq=:GetProcessVersion(dwIdThis);WORD wMajorReq=(WORD)dwVerReq>16);WORD wMinorReq=(WORD)dwVerReq&0xffff);std:cout<<"Process ID:"<<dwIdThis <<",requires OS:"<<wMajorReq<<wMinorReq<<std:e
11、ndl;/設(shè)置版本信息的數(shù)據(jù)結(jié)構(gòu),以便保存操作系統(tǒng)的版本信息OSVERSIONINFOEX osvix;:ZeroMemory(&osvix,sizeof(osvix);osvix.dwOSVersionInfoSize=sizeof(osvix);/提取版本信息和報(bào)告:GetVersionEx(reinterpret_cast<LPOSVERSIONINFO>(&osvix);std:cout<<"Running on OS:"<<osvix.dwMajorVersion<<"."<
12、<osvix.dwMinorVersion<<std:endl;/如果是NTS(Windows2000)系統(tǒng),則提高其優(yōu)先權(quán)if(osvix.dwPlatformId=VER_PLATFORM_WIN32_NT&&osvix.dwMajorVersion>=5)/改變優(yōu)先級(jí):SetPriorityClass(:GetCurrentProcess(), /利用這一進(jìn)程HIGH_PRIORITY_CLASS); /改變?yōu)閔igh/報(bào)告給用戶std:cout<<"Task Manager should now now indicate t
13、his""process is high priority."<<std:endl;實(shí)驗(yàn)參考:在Visual C+窗口的工具欄中單擊“打開”按鈕,在“打開“對(duì)話框中找到并打開4-2.cpp源程序。單擊Build菜單中的Compile 4-2.cpp命令,再單擊“是”按鈕確認(rèn)。系統(tǒng)對(duì)4-2.cpp源程序進(jìn)行編譯。編譯完成后,單擊Build菜單中的Build 4-2.exe命令,建立4-2.exe可執(zhí)行文件。在工具欄單擊Execute Program(執(zhí)行程序)按鈕,執(zhí)行4-2.exe程序。實(shí)驗(yàn)任務(wù):寫出程序運(yùn)行后的以下幾項(xiàng)結(jié)果。當(dāng)前PID信息 1628
14、。當(dāng)前操作系統(tǒng)版本 Running on OS:5.1 。系統(tǒng)提示信息 Task Manager should now now indicate thisprocess is high priority 。5、終止進(jìn)程(3)編程三 下面給出了一個(gè)終止進(jìn)程的應(yīng)用程序(文件名為4-3.cpp),它先創(chuàng)建一個(gè)子進(jìn)程,然后命令它發(fā)出“自殺彈”互斥體去終止自身的運(yùn)行。閱讀該程序并完成實(shí)驗(yàn)任務(wù)。 #include<windows.h> #include<iostream> #include<stdio.h> satic LPCTSTR g szMutexName=”w2
15、kdg.ProcTerm.mutex.Suicide”;/創(chuàng)建當(dāng)前進(jìn)程的克隆進(jìn)程的簡(jiǎn)單方法Void StartClone() /提取當(dāng)前可執(zhí)行文件的文件名 TCHAR szFilenameMAX PATH :GetModuleFileName(NULL,szFilename,MAX PATH); /格式化用于子進(jìn)程的命令行,指明它是一個(gè)EXE文件和子進(jìn)程 TCHAR szCmdLineMAX PATH; :sprintf(szCmdLine,”%s”child”,szFilename); /子進(jìn)程的啟動(dòng)信息結(jié)構(gòu) STARTUPINFO si; :ZeroMemory(reinterpret c
16、ast<void * >(&si),sizeof(si); si.cb=sizeof(si); /應(yīng)當(dāng)是此結(jié)構(gòu)的大小 /返回的用于子進(jìn)程的進(jìn)程信息 PROCESS INFORMATION pi; /用同樣的可執(zhí)行文件名和命令行創(chuàng)建進(jìn)程,并指明它是一個(gè)子進(jìn)程 BOOL bCreateOK=:CreateProcess( SzFilename, /產(chǎn)生的應(yīng)用程序名稱(本EXE文件) SzCmdLine, /告訴人們這是一個(gè)子進(jìn)程的標(biāo)志 NULL, /用于進(jìn)程的默認(rèn)的安全性 NULL, /用于線程的默認(rèn)安全性 FALSE, /不繼承句柄 CREATE NEW CONSOLE, /
17、創(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); Void Parent() /創(chuàng)建“自殺”互斥程序體 HANDLE hMutexSuicide=:CreatgeMutex( NULL, /默認(rèn)的安全性 TRUE, /最初擁有的 g szMutexName); /為其命名 if(hMutexSuicide !=NULL) /創(chuàng)建子進(jìn)程 std:
18、cout< <”Creating the child process.”< <std : endl; :StartClone(); /暫停 :sleep(5000); /指令子進(jìn)程“殺”掉自身 std:cout< <”Telling the child process to quit.”< <std:endl; :ReleaseMutex(hMutexSuicide); /消除句柄 :CloseHandle(hMutexSuicide); Void Child() /打開“自殺”互斥體 HANDLE hMutexSuicide=:OpenMute
19、x( SYNCHRONIZE, /打開用于同步 FALSE, /不需要向下傳遞 g szMutexName); /名稱 if ( hMutexSuicide !=NULL) /報(bào)告正在等待指令 Std:cout< <”Child waiting for suicide instructions.”< <std:endl; :WaitForSingleObject(hMutexSuicide,INFINITE); /報(bào)告準(zhǔn)備好終止,消除句柄 Std:cout< <”Child quiting.”< <std:endl; :CloseHandle(h
20、MutexSuicide); :sleep(1000); int main(int arqc,char * argv) /決定其行為是父進(jìn)程還是子進(jìn)程 if(argc>1 & & :strcmp(argv1,”child”)=0) Child(); else Parent(); Return 0; 修改后:#include<windows.h> #include<iostream> #include<stdio.h> static LPCTSTR g_szMutexName="w2kdg.ProcTerm.mutex.Suic
21、ide"/創(chuàng)建當(dāng)前進(jìn)程的克隆進(jìn)程的簡(jiǎn)單方法void StartClone() /提取當(dāng)前可執(zhí)行文件的文件名 TCHAR szFilenameMAX_PATH; :GetModuleFileName(NULL,szFilename,MAX_PATH); /格式化用于子進(jìn)程的命令行,指明它是一個(gè)EXE文件和子進(jìn)程 TCHAR szCmdLineMAX_PATH; :sprintf(szCmdLine,""%s"child",szFilename); /子進(jìn)程的啟動(dòng)信息結(jié)構(gòu) STARTUPINFO si; :ZeroMemory(reinterpre
22、t_cast<void*>(&si),sizeof(si); si.cb=sizeof(si); /應(yīng)當(dāng)是此結(jié)構(gòu)的大小 /返回的用于子進(jìn)程的進(jìn)程信息 PROCESS_INFORMATION pi; /用同樣的可執(zhí)行文件名和命令行創(chuàng)建進(jìn)程,并指明它是一個(gè)子進(jìn)程 BOOL bCreateOK=:CreateProcess( szFilename, /產(chǎn)生的應(yīng)用程序名稱(本EXE文件) szCmdLine, /告訴人們這是一個(gè)子進(jìn)程的標(biāo)志 NULL, /用于進(jìn)程的默認(rèn)的安全性 NULL, /用于線程的默認(rèn)安全性 FALSE, /不繼承句柄 CREATE_NEW_CONSOLE,
23、/創(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); void Parent() /創(chuàng)建“自殺”互斥程序體 HANDLE hMutexSuicide=:CreateMutex( NULL, /默認(rèn)的安全性 TRUE, /最初擁有的 g_szMutexName); /為其命名 if(hMutexSuicide !=NULL) /創(chuàng)建子進(jìn)程 std:
24、cout<<"Creating the child process."<<std:endl; :StartClone(); /暫停 :Sleep(5000); /指令子進(jìn)程“殺”掉自身 std:cout<<"Telling the child process to quit."<<std:endl; :ReleaseMutex(hMutexSuicide); /消除句柄 :CloseHandle(hMutexSuicide); void Child() /打開“自殺”互斥體 HANDLE hMutexSui
25、cide=:OpenMutex( SYNCHRONIZE, /打開用于同步 FALSE, /不需要向下傳遞 g_szMutexName); /名稱 if ( hMutexSuicide !=NULL) /報(bào)告正在等待指令 std:cout<<"Child waiting for suicide instructions."<<std:endl; :WaitForSingleObject(hMutexSuicide,INFINITE); /報(bào)告準(zhǔn)備好終止,消除句柄 std:cout<<"Child quiting."<<std:endl; :CloseHandle(hMutexSuicide); :Sleep(1000); int main(int argc,char *argv) /決定其行為是父進(jìn)程還是子進(jìn)程 if(argc>1&&:strcmp(argv1,"child")=0) Child(); else Parent(); return 0; 分析:程序4-3.cpp說明了一個(gè)進(jìn)程從“生”到“死”的整個(gè)一生,第
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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-2028年中國(guó)煙草銀行信貸行業(yè)市場(chǎng)發(fā)展現(xiàn)狀及投資戰(zhàn)略咨詢報(bào)告
- 高中課程有趣課程設(shè)計(jì)
- 二零二五年度餐飲企業(yè)員工薪酬體系設(shè)計(jì)合同
- 二零二五版社區(qū)團(tuán)購(gòu)訂餐服務(wù)合同范本與團(tuán)購(gòu)規(guī)則3篇
- 2025年度綠色建筑節(jié)能材料研發(fā)與應(yīng)用零星勞務(wù)分包合同范本4篇
- 2025年度智能電網(wǎng)建設(shè)項(xiàng)目承包強(qiáng)電施工合同書4篇
- 二零二五年度農(nóng)產(chǎn)品收購(gòu)合同樣本4篇
- 2025年度新能源汽車動(dòng)力電池回收與再利用合同4篇
- 二零二五年度家庭廚房設(shè)備定制與配送合同4篇
- 2025年度個(gè)人房屋外墻防水保溫合同范本4篇
- 安徽省合肥市包河區(qū)2023-2024學(xué)年九年級(jí)上學(xué)期期末化學(xué)試題
- 《酸堿罐區(qū)設(shè)計(jì)規(guī)范》編制說明
- PMC主管年終總結(jié)報(bào)告
- 售樓部保安管理培訓(xùn)
- 倉(cāng)儲(chǔ)培訓(xùn)課件模板
- 2025屆高考地理一輪復(fù)習(xí)第七講水循環(huán)與洋流自主練含解析
- GB/T 44914-2024和田玉分級(jí)
- 2024年度企業(yè)入駐跨境電商孵化基地合作協(xié)議3篇
- 《形勢(shì)與政策》課程標(biāo)準(zhǔn)
- 2023年海南省公務(wù)員錄用考試《行測(cè)》真題卷及答案解析
- 橋梁監(jiān)測(cè)監(jiān)控實(shí)施方案
評(píng)論
0/150
提交評(píng)論