如果我有一些已停止(终止或刚刚结束)的 Windows 进程的句柄:
- 句柄(或者更好的是它背后的内存)是否会被另一个进程重新使用?
- 或者从现在开始,GetExitCodeProcess() 等方法会永远得到正确的结果吗?
如果 1. 为真:GetExitCodeProcess() 工作“多长时间”?
如果 2. 为真:这是否意味着我可以通过启动/终止新进程来关闭操作系统,因为我创建了越来越多的句柄(并且操作系统为它们保留了内存)?
我对句柄的概念有点困惑。
提前致谢!
最佳答案
句柄间接指向一个内核对象。只要有打开的句柄,该对象就会保持事件状态。
Will the handle (or better the memory behind it) be re-used for another process?
句柄的数值(或者它是如何实现的)可能会被重用,但这并不意味着它总是指向同一个东西。就像进程 ID。
Or will GetExitCodeProcess() for example get the correct result forever from now on?
没有。当进程的所有句柄都关闭时,进程对象将被释放(连同其退出代码)。请注意,正在运行的进程对自身拥有一个隐式句柄。不过,只要需要,您可以握住打开的 handle 。
If 2. is true: Wouldn't that mean that I can bring down the OS with starting/killing new processes, since I create more and more handles (and the OS reserves memory for them)?
有很多方法可以让系统饿死。它要么开始大量交换,要么在某个时候无法生成新进程。
关于windows - 一旦进程结束,进程句柄会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6531620/