文档详情

进程控制与描述实验报告..doc

发布:2017-01-25约字共7页下载文档
文本预览下载声明
一、实验目的 利用Windows提供的API函数,编写程序,实现进程的创建和终止(如创建写字板进程及终止该进程),加深对操作系统进程概念的理解,观察操作系统进程运行的动态性能,获得包含多进程的应用程序编程经验。 二、实验内容 编写一个在dos界面下的简单进程控制系统,实现根据用户选项进行进程的创建、终止,并提供进程的状态。 (1)进程的创建和终止。编写一段程序,可以创建一个进程,并终止当前创建的进程。试观察记录程序执行的结果,并分析原因。 (2)利用VC++6.0实现上述程序设计和调试操作,对于进程创建的成功与否、终止进程操作的成功与否提供一定的提示框。 (3)通过阅读和分析实验程序,学习创建进程、观察进程和终止进程的程序设计方法 三、实验步骤 创建进程 使用了Windows提供的CreateProcess函数来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。 函数原型: 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 指向一个NULL结尾的、用来指定可执行模块的字符串。这个字符串可以使可执行模块的绝对路径,也可以是相对路径,在后一种情况下,函数使用当前驱动器和目录建立可执行模块的路径。 这个参数可以被设为NULL,在这种情况下,可执行模块的名字必须处于 lpCommandLine 参数的最前面并由空格符与后面的字符分开。 lpCommandLine 传递给新进程的命令行字符串,应当为非常量字符串的地址。可以设定一个完整的命令行,如果第一个标记没有扩展名,CreateProcess将其假设为.exe。如果找不到该文件,CreateProcess按环境设置目录搜索运行。 bInheritHandles 决定子进程对父进程继承性,一般设为FALSE。 dwCreationFlags 用于标识标志,以便用于规定如何来创建新进程。 lpStartupInfo 指向一个用于决定新进程的主窗体如何显示的STARTUPINFO结构体。 lpProcessInformation 指向一个用来接收新进程的识别信息的PROCESS_INFORMATION结构体。 在使用CreateProcess函数之前首先要对STARTUPINFO结构体进行初始化,来指定新的进程如何显示,这里对参数不再详细展开。 PROCESS_INFORMATION结构体 typedef struct _PROCESS_INFORMATION {   HANDLE hProcess; // 存放每个对象的与进程相关的句柄   HANDLE hThread; // 返回的线程句柄   DWORD dwProcessId; // 用来存放进程ID号   DWORD dwThreadId; // 用来存放线程ID号 }PROCESS_INFORMATION,*PPROCESS_INFORMATION,*LPPROCESS_INFORMATION; 调用Createprocess()函数后,会自动地对该结构进行填充。 创建新进程可使系统建立一个进程内核对象和一个线程内核对象。在创建进程的时候,系统为每个对象赋予一个初始使用计数值1 。然后,在createProcess返回之前,该函数打开进程对象和线程对象,并将每个对象的与进程相关的句柄放入PROCESS_INFORMATIO结构的hProcess和hThread成员中。当CreateProcess在内部打开这些对象时,每个对象的使用计数就变为2。 终
显示全部
相似文档