Windows 7是否回收进程ID(PID)号?

时间:2014-10-10 14:08:26

标签: windows process pid recycle

我有这个小测试程序跟踪PID的创建和关闭。 我正在调查我的程序已找到的问题,并想问你这个问题 为了更好地了解正在发生的事情。

当启动Windows进程时,它会获得一个PID,但是当进程关闭时,会执行PID 变得退休(就像一个明星篮球运动员的球衣号码)或者是否可能完全是新的 不相关的,在发布的PID下创建的过程?

由于

3 个答案:

答案 0 :(得分:16)

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

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

  

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

     

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

     

当所有句柄都关闭时,内核知道没有人   要询问流程是否仍在运行或退出的是什么   代码是(因为你需要一个句柄来询问这些问题)。在哪   指向过程对象可以被破坏,从而破坏了   进程ID。

答案 1 :(得分:11)

我进行了大约一个小时的测试,在那段时间内,302个进程退出,其中70个具有共同的PID(相同的PID用于新进程)。这样就可以说它们经常被重复使用。

答案 2 :(得分:5)

显然,如果进程终止,其PID可供重用。

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

说明

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