我想知道如何在Windows下生成进程标识符(又称PID)。它在不同机器上是否独一无二?例如,考虑当前分配给我的Firefox程序的5856 id。对于另一台机器下的同一可执行映像,它是否相同?
答案 0 :(得分:4)
PID生成主要是微软不会正式记录的秘密 - 因为一旦他们记录下来,就必须坚持使用该实现。但是,它总是4的倍数 - 但这不是你应该依赖的行为。它们不是唯一的,可以重复使用。
Raymond Chen在他的blog中提到了这一点。
答案 1 :(得分:2)
进程标识符在不同的计算机上不是唯一的。它们可以在同一台机器上重用以用于后续进程,并且在同一可执行文件的两次调用之间通常不会相同。
您不应该关心它是如何生成的 - 您唯一可以确定的是,进程标识符唯一地标识单个正在运行的进程,即在任何一个进程中只有一个进程具有该标识符时间。
答案 2 :(得分:1)
进程,线程和内核句柄ID来自常见例程。从技术上讲,这是一个DWORD虽然我不记得上次我看到它们超过65,536。它们可以重复使用,它只是一种基于反制的机制。
答案 3 :(得分:0)
进程作为内核中的对象进行维护,因此,通过HANDLEs以与系统中每个其他对象(即事件,互斥体,信号量,定时器等)相同的方式导出到用户模式。
因此,进程ID实际上只是处理对象的HANDLE,它们在全局句柄表(PspCidTable,作为实现细节)中维护。另外,线程也作为对象进行维护,并且也插入到此表中。那么线程ID实际上只是线程对象的HANDLE。
-Scott