2014-10-10 74 views
10

我有这个小测试程序,可以跟踪PID的创建和关闭。 我正在调查我的步进已经发现的问题,并想问你关于这个 以便更好地了解正在发生的事情。Windows 7是否回收进程标识(PID)编号?

当Windows过程开始时,它得到一个PID但是,当进程关闭,请问PID 成为退休(像一个明星篮球运动员的球衣号码)或有可能是一个新的,完全 无关,过程将在该公布的PID下创建?

谢谢

+0

是的,它的确如此。所以你必须对流程保持一定的把握,以确保它仍然活着 - 只要是这样,ID就会保持不变。 – Luaan 2014-10-10 14:25:20

回答

14

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

雷蒙德陈在这里讨论这个问题:When does a process ID become available for reuse?

进程ID是与过程对象相关联的价值,并为 只要过程对象仍然存在,所以也将其进程 ID。只要进程仍在运行,进程对象就会一直保留 (进程隐式保留对自身的引用),或者只要有人仍然拥有进程对象的句柄。

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

当所有的手柄闭合,然后内核知道,没有人是 要问的过程中是否仍在运行或什么的退出 代码是(因为你需要一个手柄来问这些问题)。 指向哪个进程对象可以被销毁,进而破坏进程标识 。

+0

因此,这意味着应该将流程标识符称为运行流程标识符,而不是标识单个流程。 – 2017-09-22 09:50:52

7

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

相关问题