未发布的指向外部进程(仍处于活动状态)的COM指针是否会导致该进程在销毁时挂起?
即使调用了TerminateProcess吗?
进程A有一个COM接口指针引用进程B,现在进程B在A上发出一个TerminateProcess,如果进程A中进程B的某些COM接口指针未正确释放,那么进程是否会在终止时挂起?
我想知道,因为我有一个子进程挂起的项目,即使正常关闭过程失败也会调用TerminateProcess。当它挂起时,它不仅会自行挂起,而且它也是它的父进程,因为它在生产环境中运行,所以它是灾难性的。所以我试图看看哪里有可能出错。
答案 0 :(得分:3)
没有。 TerminateProcess就是这样 - 完全破坏了这个过程。 Raymond Chen对此有几句话要说....
编辑:他还有一些more detailed articles详细说明完全进程关闭的方式。但它与TerminateProcess无关。
答案 1 :(得分:2)
嗯,是的,TerminateProcess技术上可以不终止进程。如果存在执行永不结束的I / O请求的内核线程,则该进程无法退出。易于诊断,您将在Taskmgr.exe的进程选项卡中看到进程计数为1的进程。 Vista有一个CancelIo改进来解决这个问题,我认为Raymond也谈到了这一点。
这与COM非常相关。抓住吸管:进程外的COM服务器不能很好地处理客户端的TerminateProcess,Windows无法在接口指针上自动调用Release()。它将永远运行。直到有人调用TerminateProcess,通常是Windows关闭代码或TaskMgr.exe
确保编辑您的问题并解释您甚至提出问题的原因。