VC进程的创建、终止

来源:互联网 发布:java红黑树删除 编辑:程序博客网 时间:2024/05/29 14:20

众所周知,当用户在Windows操作系统中单击一个可执行文件时,系统就相当于产生了一个新进程。那么如何在一个程序产生一个新进程呢?Windows给广大程序员提供了很多的方法,一般来说,只需要调用一个API函数就可以实现进程的创建。下面将会介绍使用CreateProcess函数创建进程和使用ExitProcess函数及TerminateProcess函数终止进程的方法。

 

CreateProcess函数用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。当一个线程调用CreateProcess时,系统就会创建一个进程内核对象,其初始使用计数是1。该进程内核对象不是进程本身,而是操作系统管理进程时使用的一个较小的数据结构,可以将进程内核对象视为由进程的统计信息组成的一个较小的数据结构。然后,系统为新进程创建一个虚拟地址空间,并将可执行文件或任何必要的DLL文件的代码和数据加载到该进程的地址空间中。

然后,系统为新进程的主线程创建一个线程内核对象。与进程内核对象一样,线程内核对象也是操作系统用来管理线程的小型数据结构。

如果系统成功地创建了新进程和主线程,CreateProcess便返回为TRUE。

BOOL CreateProcess(

LPCTSTRlpApplicationName,     //可执行模块的名字

LPTSTRlpCommandLine,    //指定要运行的命令行

LPSECURITY_ATTRIBUTESlpProcessAttribute,      //进程对象的安全性说明

LPSECURITY_ATTRIBUTESlpThreadAttribute,       //线程对象的安全性说明

BOOLbInheritHandles,         //是否从调用进程处继承了句柄

DWORD dwCreationFlags,          //指定附加的、用来控制优先类和进程的创建的标志

LPVOIDlpEnvironment,      //指向一个新进程的环境块

LPCTSTRlpCurrentDirectory,      //子进程的工作路径

LPSTARTUPINFOlpStartupInfo,        //决定新进程的主窗体外观

LPPROCESS_INFOMATIONlpProcessInformation   //获取新进程的返回信息

);

 

ExitProcess函数,当进程中的一个线程调用ExitProcess函数时,进程便终止运行。该函数的原型如下:

Void ExitProcess (UINT fuExitCode);

该函数用于终止进行的运行,并将进程的退出代码设置为fuExitCode。ExitProcess函数并不返回任何值,因为进程已经终止运行了。如果在调用ExitProcess之后又增加了代码,那么该代码是不会被执行的。

 

TerminateProcess函数

在一个进程中调用TerminateProcess函数也能够终止进程的运行。TeeminateProcess函数的原型如下:

BOOL TerminateProcess(

HANDLE hProcess,

UINT fuExitCode   );

TerminateProcess函数和ExitProcess函数的一个很大的区别在于,任何线程都可以调用TerminateProcess函数来终止另一个进程或它自己的进程的运行,而ExitProcess函数只能被线程用来自己结束自己宿主进程的运行,不能结束其他进程的运行。

0 0