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

Dra*_*max 14 windows pid process recycle

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

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

谢谢

Dav*_*nan 18

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

Raymond Chen在这里讨论了这个问题:进程ID什么时候可以重用?

进程ID是与进程对象关联的值,只要进程对象仍然存在,其进程ID也是如此.只要进程仍在运行(进程隐式保留对自身的引用)或者只有某人仍然拥有进程对象的句柄,进程对象仍然存在.

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

当所有句柄都关闭时,内核知道没有人会询问该进程是否仍在运行或退出代码是什么(因为你需要一个句柄来询问这些问题).此时可以销毁进程对象,从而破坏进程ID.

  • 所以这意味着它应该被称为运行进程标识符而不是进程标识符,因为它不标识单个进程。 (3认同)

小智 13

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


Gun*_*ele 5

显然,如果该过程终止,则其PID可用于重用.

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

备注

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