进程控制与描述实验报告

一、实验目的
利用Windows提供的API函数,编写程序,实现进程创建终止(如创建写字板进程及终止该进程),加深对操作系统进程概念的理解,观察操作系统进程运行的动态性能,获得包含多进程的应用程序编程经验。
二、实验内容
编写一个在dos界面下的简单进程控制系统,实现根据用户选项进行进程的创建、终止,并提供进程的状态。
(1)进程的创建和终止。编写一段程序,可以创建一个进程,并终止当前创建的进程。试观察记录程序执行的结果,并分析原因。
ysn-264(2)利用VC++6.0实现上述程序设计和调试操作,对于进程创建的成功与否、终止进程操作的成功与否提供一定的提示框。
(3)通过阅读和分析实验程序,学习创建进程、观察进程和终止进程的程序设计方法
三、实验步骤
堆栈式1.创建进程
使用了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
};石膏增强剂
一个线程调用该函数首先创建一个进程内核对象用来管理此新进程,随后系统为新进程创建虚拟地址空间,并将可执行文件的代码和数据加载到这个地址空间,接着系统为新进程的主线程创建一个线程内核对象。
本程序所使用的函数中各参数的解释:
1.lpApplicationName
指向一个NULL结尾的、用来指定可执行模块的字符串。这个字符串可以使可执行模块的绝对路径,也可以是相对路径,在后一种情况下,函数使用当前驱动器和目录建立可执行模块的路径。
这个参数可以被设为NULL,在这种情况下,可执行模块的名字必须处于lpCommandLine参数的最前面并由空格符与后面的字符分开。
2.lpCommandLine
传递给新进程的命令行字符串,应当为非常量字符串的地址。可以设定一个完整的命令行,如果第一个标记没有扩展名,CreateProcess将其假设为.exe。如果不到该文件,CreateProcess按环境设置目录搜索运行。
3.bInheritHandles
决定子进程对父进程继承性,一般设为FALSE。
4.dwCreationFlags
用于标识标志,以便用于规定如何来创建新进程。
5.lpStartupInfo
指向一个用于决定新进程的主窗体如何显示的STARTUPINFO结构体。
6.lpProcessInformation
指向一个用来接收新进程的识别信息的PROCESS_INFORMATION结构体。
在使用CreateProcess函数之前首先要对STARTUPINFO结构体进行初始化,来指定新的进程如何显示,这里对参数不再详细展开。
PROCESS_INFORMATION结构体
typedef struct_PROCESS_INFORMATION{
HANDLE hProcess;//存放每个对象的与进程相关的句柄
HANDLE hThread;//返回的线程句柄
DWORD dwProcessId;//用来存放进程ID号
DWORD dwThreadId;//用来存放线程ID号
0204电话录音}PROCESS_INFORMATION,*PPROCESS_INFORMATION,*LPPROCESS_INFORMATION ;
调用Createprocess()函数后,会自动地对该结构进行填充。
创建新进程可使系统建立一个进程内核对象和一个线程内核对象。在创建进程的时候,系统为每个对象赋予一个初始使用计数值1。然后,在createProcess 返回之前,该函数打开进程对象和线程对象,
并将每个对象的与进程相关的句柄放入PROCESS_INFORMATIO结构的hProcess和hThread成员中。当CreateProcess 在内部打开这些对象时,每个对象的使用计数就变为2。
2.终止进程
一个进程终止时,系统会依次执行以下操作:
1、终止进程中遗留的任何线程。
电动绞磨
2、释放进程分配的所有用户对象,关闭所有内核对象。如果它们的使用计数变为0,内核对象将会释放。
3、将进程的退出代码从STILL_ACTIVE变为传给ExitProcess或是
TerminateProcess的参数存储在内核对象中。
4、进程内核对象变为一触发状态。这也是为什么其他线程可以挂起他们自己直至另一个进程终止运行。
5、进程内核对象的使用计数递减1。
本实验使用了Windows提供的TerminateProcess函数来终止进程。
TerminateProcess函数原型:
BOOL TerminateProcess{
HANDLE hProcess
UINT uExitCode
};
函数中各参数的解释:
1.hProcess
指定要中断进程的句柄。该句柄可以由OpenProcess得到.
2.uExitCode
防水摄像头进程和其所有线程的退出代码
这个函数可以用来终止或者说杀死一个进程,它不会留给进程及其所有线程清理的时间,系统会马上终止(杀死)这个进程的所有线程,致使进程终止。在使用此函数前我们必须要调用OpenProcess函数来获得我们要终止进程的句柄,并且要获得进程的PROCESS_TERMINATE权限。
本次试验中设计的简单进程控制系统,由于采用了堆栈式的方法,即每次都将用来接收新进程的识别信息的PROCESS_INFORMATION结构体存入到一个特定的堆栈中去,这样就可以直接利用里面的参数获取需要终止的进程的句柄,从而避免了使用OpenProcess函数的麻烦。当然若这种方法只适用与这样一个简单的小型系统,并不具有普适性。
四、系统截图
1、初始界面
2、打开多个进程

本文发布于:2024-09-23 10:29:32,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/338116.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进程   对象   终止   创建
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议