windows - 一旦进程结束,进程句柄会发生什么?

标签 windows winapi process handle

如果我有一些已停止(终止或刚刚结束)的 Windows 进程的句柄:

  1. 句柄(或者更好的是它背后的内存)是否会被另一个进程重新使用?
  2. 或者从现在开始,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/

相关文章:

php - Windows bash NGINX 未完成成功的 PHP-FPM 操作

c# - 如何在另一个应用程序中挂接 api 调用

Python 多进程池进程计数

c# - 以编程方式确定是否启用了 Windows 8 安全启动

c - 后台进程返回后再次提示用户输入

asynchronous - 关于openai基线A2C实现的问题

delphi - DeferWindowPos 是否与 VCL 配合良好?

windows - 文件路径中两个星号在一起是什么意思?

windows - 如何测量 Windows 命令行上命令的执行时间?

c++ - 如何创建在崩溃时重新启动的服务