【问题标题】:Does Windows 7 recycle process id (PID) numbers?Windows 7 是否回收进程 ID (PID) 编号?
【发布时间】:2014-12-05 17:44:16
【问题描述】:

我有一个小测试程序,可以在创建和关闭 PID 时对其进行跟踪。 我正在调查我的程序发现的一个问题,并想就此向您提问 以便更好地了解正在发生的事情。

当一个windows进程启动时,它会得到一个PID,但是当进程关闭时,PID 退役(如明星篮球运动员的球衣号码),或者是否有可能获得一个全新的、完全 不相关,要在该发布的 PID 下创建进程?

谢谢

【问题讨论】:

  • 是的,确实如此。因此,您必须保留进程的句柄以确保它仍然存在 - 只要存在,ID 就会保持不变。

标签: windows process pid recycle


【解决方案1】:

显然,如果进程被终止,它的 PID 就可以重用了。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms683215%28v=vs.85%29.aspx

备注

在进程终止之前,它的进程标识符在系统上唯一标识它。有关访问权限的详细信息,请参阅进程安全性和访问权限。

【讨论】:

    【解决方案2】:

    是的,系统可能会回收进程 ID。一旦进程的最后一个句柄关闭,它们就可以用于此。

    Raymond Chen 在这里讨论过这个问题:When does a process ID become available for reuse?

    进程 ID 是与进程对象关联的值,并且作为 只要进程对象还在,它的进程也会存在 ID。只要进程仍在运行,进程对象就会一直存在 (该过程隐含地保留对自身的引用)或只要 有人仍然拥有进程对象的句柄。

    如果你仔细想想,这是有道理的,因为只要有 仍然是进程的句柄,有人可以调用 WaitForSingleObject 等待进程退出,或者他们可以调用 GetExitCodeProcess 检索退出代码,并且必须存储该退出代码 供以后检索的地方。

    当所有句柄都关闭时,内核就知道没有人在 将询问该进程是否仍在运行或其退出 代码是(因为你需要一个句柄来问这些问题)。在哪个 点进程对象可以被破坏,这反过来又破坏了 进程 ID。

    【讨论】:

    • 所以这意味着它应该被称为运行进程标识符而不是进程标识符,因为它不能识别单个进程。
    • 在像 ProccessExplorer 这样的工具中,我可以看到,一个进程也有一个“ParentProcessId”,即使那个不再存在。只要任何进程在其“ParentProcessId”中有此 PID,是否也会阻止重复使用此类 PID?
    • 不阻止重复使用 PID。我认为你的逻辑是错误的。 PID 被重复使用。
    【解决方案3】:

    我进行了大约一个小时的测试,当时有 302 个进程退出,其中 70 个进程具有共同的 PID(相同的 PID 用于新进程)。也就是说它们经常被重复使用。

    【讨论】:

      猜你喜欢
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 2017-03-09
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      相关资源
      最近更新 更多