首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

进程退出的清理有关问题

2012-01-28 
进程退出的清理问题在winxp/2000/2003中,当一个进程退出时,分几种1.exit()2.exitprocess()3.terminateproc

进程退出的清理问题
在winxp/2000/2003中,当一个进程退出时,分几种
1.exit()
2.exitprocess()
3.terminateprocess()
4.main或winmain结束

在这些情况下,系统分配的内存比如打开的文件,打开的socket,分配的内存,加载的dll,系统是怎么处理的?是全部释放还是部分释放或者不处理?
请根据以上几种情况解答一下,希望能有权威的文档说明.

[解决办法]
这个问题可能有些复杂
就我知道的情况大概说明
程序不能释放的句柄(Window)包含申请系统资源,如与进程同步、内存映射有关的资源,绘图相关的DC,Opengl有关的句柄
可以释放的有与本进程相关的资源:文件句柄、内存、socket、加载的dll
[解决办法]
不管哪种情况, 最终都是调用TerminateProcess结束进程的(实际是调用内核中的NtTerminateProcess)
Windows会释放进程分配的所有资源. 根据我的经验, 包括内存映射等共享资源都会释放, windows为每个进程维护了一张打开的句柄表, 而windows的机制决定了访问进程外的资源必须通过句柄, 所以进程使用的资源都会释放掉, 例外情况是如果某个内核驱动出现异常终止时则不能正常释放资源(这时也该兰屏了), 另外如果驱动分配的资源不主动释放的话是会产生泄漏的.

热点排行