看看我们的进程强制结束

看看我们的进程强制结束

 

我们通常的进程是通过退出主线程来完成, 这里的退出不是指用TerminateThread方法去退出. 而是线程碰到return返回或着执行完整个线程体. 多个线程的程序, 则主线程退出的时候一一去等待其他的线程退出, 然后再退出本身. 怎么样正常的退出进程不是我们要在这里讨论的问题, 有兴趣的话可以参看win32多线程程序设计.

 

在讨论下面话题之前需要指出的一点. 不要在万不得已的情况下使用强制退出进程.

 

这里我们重点讨论怎么非正常的退出进程. 先说一下在什么情况下你可能会考虑到这种方式.

你可能去客户现场进行UAT之前的测试, 但是发现系统中某个进程在退出时需要花很长的时间, 如超过1分钟以上. 当然这个问题你之前没有发现, 因为这个问题只有在你的客户那里出现, 在公司的开发机和测试机上退出很快. 因为马上就要进行UAT了没有多少时间了.这种情况下你就可能会考虑到强制退出,暂时去解决这个问题, 等UAT顺利完成后, 你在慢慢的去解决这个问题.

 

那么你几种选择呢?

exit, TerminateProcess, ExitProcess?

 

在我们使用这些函数之前, 先看看它们都有什么特点.

exit, 这个函数时c运行时库的函数, 其实除了这个函数外, c运行时库还提供了其他类似的_exit, _cexit, _c_exit. exit这个函数在退出进程前它自动做一些清理工作, 包括文件的Flush, 关闭文件句柄. _exit则是立即退出, 不会做清理工作.

TerminateProcess, ExitProcess: 这个2个方法都是windows运行时库提供的函数, 前者只会去关闭一些对象的句柄然后就退出进程, 而后者则会关闭句柄和通知所有加载进来的DLL.

 

这样的话我们可以选择顺序可以ExitProcess->exit->TerminateProcess->_exit.

 

其实上述场景时我在客户现场碰到过, 当时我先选的exit,发现在退出的时候弹出内存不可读错误. 其实这就时在释放资源出错. 后来我就用TerminateProcess, 就没有问题了.

 

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

Leave a Reply

Your email address will not be published. Required fields are marked *