操作系统实验报告4

更新时间:2023-10-10 01:31:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《操作系统 》实验报告

实验序号: 4 实验项目名称:进程控制 学 号 实验地点 一、 1207122219 1-418 姓 名 指导教师 邝沃佳 李远敏 专业、班 实验时间 软金二班 2014/10/21 实验目的及要求 (1) 通过对WindowsXP进行编程,来熟悉和了解系统。 (2) 通过分析程序,来了解进程的创建、终止。 二、实验设备(环境)及要求 (1) 一台WindowsXP操作系统的计算机。 (2) 计算机装有Microsoft Visual Studio C++6.0专业版或企业版。 (3) ·CreateProcess()调用:创建一个进程。 (4) ·ExitProcess()调用:终止一个进程。 三、实验内容与步骤 (1)编程一 利用CreateProcess()函数创建一个子进程并且装入画图程序(mspaint.exe)。阅读该程序,完成实验任务。源程序如下: # 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: \\ WINDOWS\\system32\\ 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 #include int main(VOID) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si,sizeof(si)); si.cb=sizeof(si); ZeroMemory(&pi,sizeof(pi)); if(!CreateProcess(NULL, \ NULL, NULL, FALSE, 0, NULL, NULL, &si,&pi)) { fprintf(stderr,\ return -1; } WaitForSingleObject(pi.hProcess,INFINITE); printf(\ CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } 在“命令提示符”窗口运行CL命令产生可执行程序4-1.exe: C:\\ >CL 4-1.cpp 实验任务:写出程序的运行结果。 4.正在运行的进程 (2)、编程二 下面给出了一个使用进程和操作系统版本信息应用程序(文件名为4-5.cpp)。它利用进程信息查询的API函数GetProcessVersion()与GetVersionEx()的共同作用。确定运行进程的操作系统版本号。阅读该程序并完成实验任务。 #include #include //利用进程和操作系统的版本信息的简单示例 Void main() ﹛ //提取这个进程的ID号 DWORD dwIdThis=::GetCurrentProcessId(); //获得这一进程和报告所需的版本,也可以发送0以便指明这一进程 DWORD dwVerReq=::GetProcessVersion(dwIdThis); WORD wMajorReq=::(WORD)dwVerReq>16); WORD wMinorReq=::(WORD)dwVerReq & oxffff); std::cout< <”Process ID:”< (&osvix)); Std::cout< <”Running on OS:”< =5 ﹛ //改变优先级 ::SerPriorityClass( ::GetCurrentProcess() //利用这一进程 HIGH PRIORITY CLASS); //改变为high //报告给用户 Std::cout< <”Task Manager should now now indicate this” “process is high priority.”< #include //利用进程和操作系统的版本信息的简单示例 void main() { //提取这个进程的ID号 DWORD dwIdThis=::GetCurrentProcessId(); //获得这一进程和报告所需的版本,也可以发送0以便指明这一进程 DWORD dwVerReq=::GetProcessVersion(dwIdThis); WORD wMajorReq=((WORD)dwVerReq>16); WORD wMinorReq=((WORD)dwVerReq&0xffff); std::cout<<\ <<\ //设置版本信息的数据结构,以便保存操作系统的版本信息 OSVERSIONINFOEX osvix; ::ZeroMemory(&osvix,sizeof(osvix)); osvix.dwOSVersionInfoSize=sizeof(osvix); //提取版本信息和报告 ::GetVersionEx(reinterpret_cast(&osvix)); std::cout<<\ <=5) { //改变优先级 ::SetPriorityClass( ::GetCurrentProcess(), //利用这一进程 HIGH_PRIORITY_CLASS); //改变为high //报告给用户 std::cout<<\

} } \实验参考:①在Visual C++窗口的工具栏中单击“打开”按钮,在“打开“对话框中找到并打开4-2.cpp源程序。 ②单击Build菜单中的Compile 4-2.cpp命令,再单击“是”按钮确认。系统对4-2.cpp源程序进行编译。 ③编译完成后,单击Build菜单中的Build 4-2.exe命令,建立4-2.exe可执行文件。 ④在工具栏单击Execute Program(执行程序)按钮,执行4-2.exe程序。

实验任务:写出程序运行后的以下几项结果。 当前PID信息 1628 。 当前操作系统版本 Running on OS:5.1 。 系统提示信息 Task Manager should now now indicate thisprocess is high priority 。 5、终止进程 (3)编程三 下面给出了一个终止进程的应用程序(文件名为4-3.cpp),它先创建一个子进程,然后命令它发出“自杀弹”互斥体去终止自身的运行。阅读该程序并完成实验任务。 #include #include #include satic LPCTSTR g szMutexName=”w2kdg.ProcTerm.mutex.Suicide”; //创建当前进程的克隆进程的简单方法 Void StartClone() ﹛ //提取当前可执行文件的文件名 TCHAR szFilename﹝MAX PATH﹞ ::GetModuleFileName(NULL,szFilename,MAX PATH); //格式化用于子进程的命令行,指明它是一个EXE文件和子进程 TCHAR szCmdLine﹝MAX PATH﹞; ::sprintf(szCmdLine,”\\”%s\\”child”,szFilename); //子进程的启动信息结构 STARTUPINFO si; ::ZeroMemory(reinterpret cast(&si),sizeof(si)); si.cb=sizeof(si); //应当是此结构的大小 //返回的用于子进程的进程信息 PROCESS INFORMATION pi; //用同样的可执行文件名和命令行创建进程,并指明它是一个子进程 BOOL bCreateOK=::CreateProcess( SzFilename, //产生的应用程序名称(本EXE文件) SzCmdLine, //告诉人们这是一个子进程的标志 NULL, //用于进程的默认的安全性 NULL, //用于线程的默认安全性 FALSE, //不继承句柄 CREATE NEW CONSOLE, //创建新窗口,使输出更直观 NULL, //新环境 NULL, //当前目录 &si, //启动信息结构 &pi); //返回的进程的信息 //释放指向子进程的引用 if(bCreateOK) ﹛ ::CloseHandle(pi.hProcess); ::CloseHandle(pi.hThread); ﹜ ﹜ Void Parent() ﹛ //创建“自杀”互斥程序体 HANDLE hMutexSuicide=::CreatgeMutex( NULL, //默认的安全性 TRUE, //最初拥有的 g szMutexName); //为其命名 if(hMutexSuicide !=NULL) ﹛ //创建子进程 std::cout< <”Creating the child process.”< 1 & & ::strcmp(argv﹝1﹞,”child”)==0) ﹛ Child(); ﹜ else ﹛ Parent(); ﹜ Return 0; ﹜

修改后: #include #include #include static LPCTSTR g_szMutexName=\ //创建当前进程的克隆进程的简单方法 void StartClone() { //提取当前可执行文件的文件名 TCHAR szFilename[MAX_PATH]; ::GetModuleFileName(NULL,szFilename,MAX_PATH); //格式化用于子进程的命令行,指明它是一个EXE文件和子进程 TCHAR szCmdLine[MAX_PATH]; ::sprintf(szCmdLine,\ //子进程的启动信息结构 STARTUPINFO si; ::ZeroMemory(reinterpret_cast(&si),sizeof(si)); si.cb=sizeof(si); //应当是此结构的大小 //返回的用于子进程的进程信息 PROCESS_INFORMATION pi; //用同样的可执行文件名和命令行创建进程,并指明它是一个子进程 BOOL bCreateOK=::CreateProcess( szFilename, //产生的应用程序名称(本EXE文件) szCmdLine, //告诉人们这是一个子进程的标志 NULL, //用于进程的默认的安全性 NULL, //用于线程的默认安全性 FALSE, //不继承句柄 CREATE_NEW_CONSOLE, //创建新窗口,使输出更直观 NULL, //新环境 NULL, //当前目录 &si, //启动信息结构 &pi); //返回的进程的信息 //释放指向子进程的引用 if(bCreateOK) { ::CloseHandle(pi.hProcess); ::CloseHandle(pi.hThread); } } void Parent() { //创建“自杀”互斥程序体 HANDLE hMutexSuicide=::CreateMutex( NULL, //默认的安全性 TRUE, //最初拥有的 g_szMutexName); //为其命名 if(hMutexSuicide !=NULL) { //创建子进程 std::cout<<\ ::StartClone();

本文来源:https://www.bwwdw.com/article/razf.html

Top