一旦流程结束,流程句柄会发生什么?

时间:2011-06-30 07:53:53

标签: windows winapi process handle

如果我有一个已停止(已终止或刚刚结束)的某个窗口进程的句柄:

  1. 是否可以将句柄(或更好的内存)重新用于另一个进程?
  2. 或者GetExitCodeProcess()会从现在开始永远得到正确的结果吗?
  3. 如果1.为真:GetExitCodeProcess()的“长”程度如何? 如果2.为真:这是否意味着我可以通过启动/终止新进程来关闭操作系统,因为我创建了越来越多的句柄(并且操作系统为它们保留了内存)?

    我对句柄的概念感到有点困惑。

    提前谢谢!

2 个答案:

答案 0 :(得分:7)

句柄间接指向内核对象。只要有打开的手柄,物体就会保持活着。

  

是否可以将句柄(或更好的内存)重新用于另一个进程?

句柄的数值(或者它实现了)可能会被重用,但这并不意味着它总是指向同一个东西。就像进程ID一样。

  

或者GetExitCodeProcess()例如从现在开始永远得到正确的结果吗?

没有。当关闭进程的所有句柄时,将释放进程对象(及其退出代码)。请注意,运行进程持有自身的隐式句柄。但是,只要你需要,你就可以握住一个打开的手柄。

  

如果2.为真:这是否意味着我可以通过启动/终止新进程来关闭操作系统,因为我创建了越来越多的句柄(并且操作系统为它们保留了内存)?

有很多方法可以使系统挨饿。它要么开始大量交换,要么在某个时候无法产生新进程。

答案 1 :(得分:1)

简短回答:

GetExitCodeProcess一直有效,直到您调用CloseHandle之后,过程对象将被释放并可以重复使用。

答案很长: 请参阅Cat Plus Plus的答案。

相关问题