进程的创建与撤销
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一进程创建与撤销
一.实验目的
1.通过创建进程,观察正在运行的进程和终止进程的程序设计与调试操作,进一步熟悉操作系统的进程概念,理解windows 2007进程生存过程.
2.通过阅读和分析实验程序,学习创建进程,观察进程和终止进程的程序设计方法。
二.背景知识
三.1.创建进程:CreateProcess()调用的核心参数是可执行文件运行时的文件名以及其命令行。其核心参数和名称和类型如下:
lpApplicationName:指定要执行的模块,包括可执行代码的EXE文件的文件名。lpCommandLine:指向一个以空结尾的串,该串定义了要执行。该命令行是可以在Windows 提示符下执行的的命令行命令行。
lpProcessAttributes:指向一个SECURITY_A TTRIBUTES结构,该结构决定了返回的句柄是否可被子进程继承。
lpThreadAttributes:指向一个SECURITY_A TTRIBUTES结构,该结构决定了返回的句柄是否可被子进程继承。
bInheritHandles:表明新进程是否可继承创建者进程的句柄。
dwCreationFlags:定义控制优先类和进程创建的附加标志。
lpEnvironment:指向一个新进程的环境块。
lpCurrentDirectory:指向一个以空结尾的串,该串定义了子进程的当前驱动器和当前目录。lpStartupInfo:指向一个STARTUPINFO结构,该结构定义了新进程的主窗口将如何显示。lpProcessInformation:指向进程信息描述结构,该结构接受关于新进程的描述信息。
可执行文件运行时的文件名及其命令行,如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_INFORMA TION pi
所有进程都是以调用ExitProcess() 或者TerminateProcess() 函数结束的。TerminateProcess() API函数只要打开带有PROCESS_TERMINATE访问权的进程对象,就可以终止进程,并向系统返回指定的代码。
如果不知道所创建进程中所有线程的状态,最好使用TerminateProcess() 终止进程。
四.进程创建和撤销的代码
#include
#include
#include
using namespace std;
void main()
{
PROCESS_INFORMATION pi;
STARTUPINFO si;//一数据结构,定义新进程的窗口如何显示memset(&si,0,sizeof(si));//为该结构内存中数据初始化为0
si.cb=sizeof(si);
si.wShowWindow=SW_SHOW;
si.dwFlags=STARTF_USESHOWWINDOW;
bool creat=CreateProcess(NULL,
"C:\\Users\\Stone\\Desktop\\示例代码\\line演示\\line\\x64\\Debug\\ line.exe",
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS|CREATE_NEW_CONSOLE,
NULL,
NULL,
&si,
&pi);
if(!creat)
{
"进程创建成功!";
}
else
cout<<"进程创建成功!"<<"\n";
if(!TerminateProcess(pi.hProcess,0)){ cout<<"终止进程出错!";
}
else
{
cout<<"终止进程成功!";
}
int n;
cin>>n;
}
当父进程执行时的运行结果如图:
控制面板上的信息提示为:
执行结果为:
五.心得体会
通过本实验的操作,简单了解了CreateProcess()函数的参数类型,以及参数中涉及的一些数据结构,对于进程创建过程中遇到的bug,能结合各数据结构的参数类型进行转换,得以
成功完成进程的创建和销毁。