我有这个小测试程序跟踪PID的创建和关闭。 我正在调查我的程序已找到的问题,并想问你这个问题 为了更好地了解正在发生的事情。
当启动Windows进程时,它会获得一个PID,但是当进程关闭时,会执行PID 变得退休(就像一个明星篮球运动员的球衣号码)或者是否可能完全是新的 不相关的,在发布的PID下创建的过程?
由于
答案 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
说明
在进程终止之前,其进程标识符在系统上唯一标识它。有关访问权限的更多信息,请参阅进程安全性和访问权限。