版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng) 實驗報告實驗序號:4實驗項目名稱:進(jìn)程控制學(xué)號1207122219姓名鄺沃佳專業(yè)、班軟金二班實驗地點1-418指導(dǎo)教師李遠(yuǎn)敏實驗時間2014/10/21一、 實驗?zāi)康募耙螅?) 通過對WindowsXP進(jìn)行編程,來熟悉和了解系統(tǒng)。(2) 通過分析程序,來了解進(jìn)程的創(chuàng)建、終止。二、實驗設(shè)備(環(huán)境)及要求(1) 一臺WindowsXP操作系統(tǒng)的計算機(jī)。(2) 計算機(jī)裝有Microsoft Visual Studio C+6.0專業(yè)版或企業(yè)版。(3) ·CreateProcess()調(diào)用:創(chuàng)建一個進(jìn)程。(4) ·ExitProcess()調(diào)用:終止一個進(jìn)程。三、實驗內(nèi)
2、容與步驟(1)編程一 利用CreateProcess()函數(shù)創(chuàng)建一個子進(jìn)程并且裝入畫圖程序(mspaint.exe)。閱讀該程序,完成實驗任務(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 實驗任務(wù):寫出程序的運(yùn)行結(jié)果。 4正在運(yùn)行的進(jìn)程 (2)、編程二 下面給出了一個使用進(jìn)程和操作系統(tǒng)版本信息應(yīng)用程序(文件名為4-5.cpp)。它利用進(jìn)程信息查詢的API函數(shù)GetProcessVersion()與GetVersionEx()的共同
6、作用。確定運(yùn)行進(jìn)程的操作系統(tǒng)版本號。閱讀該程序并完成實驗任務(wù)。 #include<windows.h> #include<iostream>/利用進(jìn)程和操作系統(tǒng)的版本信息的簡單示例Void main() /提取這個進(jìn)程的ID號 DWORD dwIdThis=:GetCurrentProcessId(); /獲得這一進(jìn)程和報告所需的版本,也可以發(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);/提取版本信息和報告: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)先級:SerPriorit
9、yClass(:GetCurrentProcess() /利用這一進(jìn)程 HIGH PRIORITY CLASS); /改變?yōu)閔igh/報告給用戶Std:cout< <”Task Manager should now now indicate this” “process is high priority.”< <std:endl;修改后:#include<windows.h>#include<iostream>/利用進(jìn)程和操作系統(tǒng)的版本信息的簡單示例void main()/提取這個進(jìn)程的ID號DWORD dwIdThis=:GetCurrentP
10、rocessId();/獲得這一進(jìn)程和報告所需的版本,也可以發(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);/提取版本信息和報告: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)先級:SetPriorityClass(:GetCurrentProcess(), /利用這一進(jìn)程HIGH_PRIORITY_CLASS); /改變?yōu)閔igh/報告給用戶std:cout<<"Task Manager should now now indicate t
13、his""process is high priority."<<std:endl;實驗參考:在Visual C+窗口的工具欄中單擊“打開”按鈕,在“打開“對話框中找到并打開4-2.cpp源程序。單擊Build菜單中的Compile 4-2.cpp命令,再單擊“是”按鈕確認(rèn)。系統(tǒng)對4-2.cpp源程序進(jìn)行編譯。編譯完成后,單擊Build菜單中的Build 4-2.exe命令,建立4-2.exe可執(zhí)行文件。在工具欄單擊Execute Program(執(zhí)行程序)按鈕,執(zhí)行4-2.exe程序。實驗任務(wù):寫出程序運(yùn)行后的以下幾項結(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)編程三 下面給出了一個終止進(jìn)程的應(yīng)用程序(文件名為4-3.cpp),它先創(chuàng)建一個子進(jìn)程,然后命令它發(fā)出“自殺彈”互斥體去終止自身的運(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)程的簡單方法Void StartClone() /提取當(dāng)前可執(zhí)行文件的文件名 TCHAR szFilenameMAX PATH :GetModuleFileName(NULL,szFilename,MAX PATH); /格式化用于子進(jìn)程的命令行,指明它是一個EXE文件和子進(jìn)程 TCHAR szCmdLineMAX PATH; :sprintf(szCmdLine,”%s”child”,szFilename); /子進(jìn)程的啟動信息結(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)程,并指明它是一個子進(jìn)程 BOOL bCreateOK=:CreateProcess( SzFilename, /產(chǎn)生的應(yīng)用程序名稱(本EXE文件) SzCmdLine, /告訴人們這是一個子進(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, /啟動信息結(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) /報告正在等待指令 Std:cout< <”Child waiting for suicide instructions.”< <std:endl; :WaitForSingleObject(hMutexSuicide,INFINITE); /報告準(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)程的簡單方法void StartClone() /提取當(dāng)前可執(zhí)行文件的文件名 TCHAR szFilenameMAX_PATH; :GetModuleFileName(NULL,szFilename,MAX_PATH); /格式化用于子進(jìn)程的命令行,指明它是一個EXE文件和子進(jìn)程 TCHAR szCmdLineMAX_PATH; :sprintf(szCmdLine,""%s"child",szFilename); /子進(jìn)程的啟動信息結(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)程,并指明它是一個子進(jìn)程 BOOL bCreateOK=:CreateProcess( szFilename, /產(chǎn)生的應(yīng)用程序名稱(本EXE文件) szCmdLine, /告訴人們這是一個子進(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, /啟動信息結(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) /報告正在等待指令 std:cout<<"Child waiting for suicide instructions."<<std:endl; :WaitForSingleObject(hMutexSuicide,INFINITE); /報告準(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說明了一個進(jìn)程從“生”到“死”的整個一生,第
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度茶青種植基地技術(shù)合作與采購合同4篇
- 2025年度超精密注塑機(jī)轉(zhuǎn)讓合同范本(含專利技術(shù))4篇
- 2025年個人股權(quán)收購與轉(zhuǎn)讓盡職調(diào)查合同4篇
- 機(jī)器人制造產(chǎn)業(yè)鏈-深度研究
- 二零二五年度儲煤場租賃及煤炭檢驗檢測服務(wù)合同4篇
- 二零二五版鎳礦國際貿(mào)易爭端解決合同4篇
- 美團(tuán)2025版商家入駐平臺傭金調(diào)整合作協(xié)議4篇
- 二零二五年度航空器購置合同示范文本4篇
- 威脅情報共享機(jī)制-第1篇-深度研究
- 實時進(jìn)程控制-深度研究
- 多重耐藥菌病人的管理-(1)課件
- (高清版)TDT 1056-2019 縣級國土資源調(diào)查生產(chǎn)成本定額
- 環(huán)境監(jiān)測對環(huán)境保護(hù)的意義
- 2023年數(shù)學(xué)競賽AMC8試卷(含答案)
- 神經(jīng)外科課件:神經(jīng)外科急重癥
- 2024年低壓電工證理論考試題庫及答案
- 2023年十天突破公務(wù)員面試
- 《瘋狂動物城》中英文對照(全本臺詞)
- 醫(yī)院住院醫(yī)師規(guī)范化培訓(xùn)證明(樣本)
- 小學(xué)六年級語文閱讀理解100篇(及答案)
- 氣功修煉十奧妙
評論
0/150
提交評論