实验一 进程控制与描述
时间:2025-07-08
时间:2025-07-08
操作系统原理实验浙江工业大学 计算机科学与技术学院 何玲娜
实验一 进程控制与描述实验目的: 利用Windows提供的API函数,编写程序, 实现进程的创建和终止(如创建写字板 进程及终止该进程),加深对操作系统 进程概念的理解,观察操作系统进程运 行的动态性能,获得包含多进程的应用 程序编程经验。
背景知识 Windows 所创建的每个进程都从调用 CreateProcess() API函数开始,该函数的 任务是在对象管理器子系统内初始化进程 对象;
每一进程都以调用ExitProcess() 或TerminateProcess() API函数终止。
进程创建实例BOOL CreateProcess( LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation );
各项参数意义 lpApplicationName:指定要执行的模块,包括可执 行代码的EXE文件的文件名。 lpCommandLine:指向一个以空结尾的串,该串定 义了要执行的命令行。该命令行是可以在Windows 提示符下执行的命令行。 lpProcessAttributes:指向一个 SECURITY_ATTRIBUTES结构,该结构决定了返 回的句柄是否可被子进程继承。 lpThreadAttributes:指向一个 SECURITY_ATTRIBUTES结构,该结构决定了返 回的句柄是否可被子进程继承。
各项参数意义 bInheritHandles:表明新进程是否可继承创建者进 程的句柄。 dwCreationFlags:定义控制优先类和进程创建的附 加标志。 lpEnvironment:指向一个新进程的环境块。 lpCurrentDirectory:指向一个以空结尾的串,该串 定义了子进程的当前驱动器和当前目录。 lpStartupInfo:指向一个STARTUPINFO结构,该 结构定义了新进程的主窗口将如何显示。 lpProcessInformation:指向进程信息描述结构,该 结构接受关于新进程的描述信息。
CreateProcess() 调用的核心参数 可执行文件运行时的文件名及其命令行,如lpCommandLine="c:\\windows\\system32\\cmd.exe” 或lpApplicationName=“c:\windows\system32\cmd.exe”
lpStartupInfor描述新进程的窗口显示情况。定义 STARTUPINFO结构,并赋予初始值, 如:STARTUPINFO si; memset(&si,0,sizeof(si)); si.cb=sizeof(si);
lpProcessInformation指向进程信息描述结构,接 受关于新进程的描述信息,如:PROCESS_INFORMATION pi
终止进程 所有进程都是以调用ExitProcess() 或者 TerminateProcess() 函数结束的。
TerminateProcess() API函数只要打开带有 PROCESS_TERMINATE访问权的进程对象,就 可以终止进程,并向系统返回指定的代码。 如果不知道所创建进程中所有线程的状态,最好 使用Terminat
eProcess() 终止进程。
ExitProcess() VOID ExitProcess( UINT uExitCode ); uExitCode [in] Exit code for the process and all threads terminated as a result of this call. Use the GetExitCodeProcess function to retrieve the process's exit value. Use the GetExitCodeThread function to retrieve a thread's exit value.
TerminateProcess() BOOL TerminateProcess( HANDLE hProcess, UINT uExitCode ); hProcess[in] Handle to the process to terminate. The handle must have the PROCESS_TERMINATE access right. uExitCode[in] Exit code to be used by the process and threads terminated as a result of this call. Value 0 means current process.
PROCESS_INFORMATIONtypedef struct _PROCESS_INFORMATION { HANDLE hProcess; //Handle to the newly created process. HANDLE hThread; //Handle to the primary thread of the newly created process. DWORD dwProcessId; //Value that can be used to identify a process. DWORD dwThreadId; //Value that can be used to identify a thread. } PROCESS_INFORMATION, *LPPROCESS_INFORMATION;
实验内容与步骤 进程的创建和终止。编写一段程序,可以创建一
个进程,并终止当前创建的进程。试观察记录程序执行的结果,并分析原因。 利用VC++6.0实现上述程序设计和调试操作,对于 进程创建的成功与否、终止进程操作的成功与否 提供一定的提示框。
通过阅读和分析实验程序,学习创建进程、观察进程和终止进程的程序设计方法
工具/准备工作 在开始本实验之前,请回顾教科书的相关内容 需要做以下准备:
一台运行Windows 2000 /XP 操作系统的计算机 计算机中需安装Visual C++ 6.0专业版或企业版
思考 系统是怎样创建进程的? 可执行文件加载时进行了那些处理? 当首次调用新创建进程时,其入口在那 里?
实验报告 每人独立一组,需要上交实验报告 实验报告包括实验目的、实验内容、实验步骤、 实验中遇到的问题及解决方法等。 上交程序源代码。 源代码和实验报告一并打包后上交,其命名方 式为:班级_学号_姓名.rar (注:只需上交源代码,不需要上交生成的目标 文件及可执行文件。) 通过EMAIL地址上交:coignhln@http://www.77cn.com.cn
…… 此处隐藏:1101字,全部文档内容请下载后查看。喜欢就下载吧 ……