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函数只能被线程用来自己结束自己宿主进程的运行,不能结束其他进程的运行。
- VC进程的创建、终止
- OS之 进程的创建与终止
- VC查看系统进程ID,终止进程的程序源码
- 进程创建和进程终止
- fork()&&进程的创建与终止--多进程编程
- 进程基础-进程的创建、管理与调度、终止
- 进程控制:进程的创建、终止、阻塞、唤醒和切换
- VC++控制台程序终止进程
- VC强止终止进程
- 【linux】进程创建、等待、终止
- 监视系统中进程的创建和终止
- 监视系统中进程的创建和终止
- Windows核心编程(四)进程的创建与终止
- 从系统调用fork,到进程的创建与终止
- 《linux下进程的创建,执行,监控和终止》
- linux下进程的状态,创建,替换,等待,终止
- 终止进程的内幕
- 终止进程的内幕
- MD5加密
- Google 2015项目前瞻:智能隐形眼镜、Google X、Ara
- 2015年1月6日从今天起我定记录一下我自己的学习成果,知识的积累从一点一滴开始!window下搭建solr
- 【BZOJ1738】【POJ2391】【Usaco2005 mar】 Ombrophobic Bovines 发抖的牛 网络流
- 23种设计模式(9):策略模式
- VC进程的创建、终止
- cocostudio2.0 碰到的问题
- C++静态库与动态库
- 1033. To Fill or Not to Fill (25)
- 线程的创建及简单使用
- 杭电OJ(HDOJ)1047题:Integer Inquiry(大数操作——加运算)
- 成功的关键,不是情商或智商,而是毅力
- sdagsaas
- oracle树形表常用查询