VC进程的创建、终止
2015-01-06 19:43
176 查看
众所周知,当用户在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函数只能被线程用来自己结束自己宿主进程的运行,不能结束其他进程的运行。
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函数只能被线程用来自己结束自己宿主进程的运行,不能结束其他进程的运行。
相关文章推荐
- 进程概述及创建,终止(VC_Win32)
- 进程概述及创建,终止(VC_Win32)
- VC 创建新进程,结束进程 (打开exe等可执行文件)
- vc++创建一个进程
- 线程概述,优先级,睡眠,创建及终止(VC_Win32)
- 监视系统中进程的创建和终止
- 监视系统中进程的创建和终止
- 监视系统中进程的创建和终止
- Windows核心编程(四)进程的创建与终止
- 【转】VC中如何启动其它程序,并且获得启动程序的PID 创建进程CreateProcess函数
- 进程创建和进程终止
- 用VC创建进程和线程
- VC 创建和结束进程
- VC 创建进程
- 进程概述及创建(VC_Win32)
- VC 创建和结束进程
- VC++创建和结束进程
- VC++控制台程序终止进程
- VC创建和结束进程
- vc++ 创建进程