进程的创建与撤销

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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,能结合各数据结构的参数类型进行转换,得以

成功完成进程的创建和销毁。

相关文档
最新文档