我想知道在Windows下如何生成进程标识符(即PID)。它在不同的机器上是唯一的吗?例如,考虑当前分配给我的Firefox程序的5856 ID。在另一台机器上,对于相同的可执行文件镜像,它是否相同?
PIDs生成通常是微软不会正式记录的机密 - 因为一旦他们记录了,就必须坚持这种实现方式。但是,它总是4的倍数 - 但这不是您应该依赖的行为。它们并不唯一,也可以被重复使用。
Raymond Chen在他的 博客 中提到了这一点。
进程标识符在不同的机器上并不唯一。它们可以在同一台机器上被重复使用,通常在同一可执行文件的两次调用之间也不会相同。
您不需要关心如何生成它 - 您唯一可以确定的是进程标识符唯一地标识单个正在运行的进程,即任何时候都只有一个具有该标识符的进程。
进程、线程和内核句柄 ID 来自一个公共例程。技术上,这是一个 DWORD,但我不记得上次看到它们超过 65,536。它们可以被重复使用,并且只是计数器机制。
进程在内核中作为对象进行维护,因此可以通过句柄(HANDLE)与系统中的其他对象(如事件、互斥量、信号量、计时器等)一样导出到用户模式。
因此,进程ID实际上只是指向进程对象的句柄,这些句柄存储于全局句柄表中(PspCidTable,作为实现细节)。有趣的是,线程也被视为对象并插入到该表中。因此,线程ID实际上只是指向线程对象的句柄。
-scott