如果进程的线程处于未知状态,为什么不能终止进程?

时间:2010-08-10 02:05:45

标签: thread-safety

根据我的经验,当主线程准备好退出时,它应该等到其他线程正常退出。

但是从这个链接http://msdn.microsoft.com/en-us/library/ms686722(v=VS.85).aspx,它查看进程终止时,所有相关资源都被释放,因此如果某个工作线程正在做繁重的工作,等待可能会更长。我可以忽略等待吗?

同样在上面的链接中,我找到了

  

除非是,否则不要终止进程   线程处于已知状态。如果一个   线程在等待内核对象,   它不会被终止,直到   等完了。这可能导致   申请挂起。

这太短了,无法理解为什么在进程退出错误时杀死未知状态的线程。

有人能给我更详细的问题吗?

由于

1 个答案:

答案 0 :(得分:0)

因此,当一个线程正在等待内核中的一个对象时,它将不会在等待结束之前退出。

所以,假设您有一个包含3个线程的应用程序,处于以下状态:

  1. 主线程,目前处于空闲状态
  2. UI处理线程,当前处于空闲状态
  3. 等待内核对象的线程
  4. 如果您终止进程,则线程2将死亡,使UI输入处理程序死亡,从而给出应用程序无响应(挂起)的外观。在线程#3完成内核等待之前,主线程将不会退出,因此进程仍在运行,并且进程资源不会被释放。

    所以,我认为它基本上是说最好让一个进程正常退出,而不是发送一个kill信号,因为你可以让自己陷入如上所述任何一个进程线程等待的情况内核对象。