Windows系统中最大的进程ID是多少?

20

DWORD GetProcessId(HANDLE)函数或DWORD GetCurrentProcessId()函数调用后能够返回的最大进程ID是多少?API文档中没有对此进行说明。

2个回答

20
根据Mark Russinovich的博客文章《Pushing the Limits of Windows: Processes and Threads》,进程数量仅受可用内存限制。因此,理论上最大的进程ID是DWORD_MAX对齐到4:0xFFFFFFFC(因为在Windows上pid/tid值都是以4对齐的)。

3
你是从哪里得到 PID 是 DWORD 的概念的?“PID 可以被 4 整除”既困惑又模糊。如果你的意思是它们可以被 4 整除,那么你认为它们是 DWORD 的假设是没有根据的,因为任何数字都可以被 4 整除。如果你的意思是它们在内存中对齐到 DWORD,那么这也是一个牵强附会的假设,因为即使一个字符也可以对齐到 DWORD。 - Synetech
4
我想表达的是,您需要将DWORD_MAX(0xFFFFFFFF)对齐到4。因此,最大PID为0xFFFFFFFC。 - Sergey Podobry
但是你从哪里得到了DWORD?在你提供的文章中,单词“DWORD”并不存在。是否有文档表明PID是DWORD? - Synetech
2
你可以查看 GetProcessId 函数。它会返回 DWORD 类型的 PID。 - Sergey Podobry
2
请注意,您不应该依赖于PID被四整除这一点(http://blogs.msdn.com/b/oldnewthing/archive/2008/02/28/7925962.aspx)。这只是纯属巧合。 - icabod
显示剩余3条评论

5

我没有找到官方的声明,但是由于它被存储和返回为DWORD,你应该假设它可以使用整个32位范围。在实际系统中,我从未看到过大于约200,000的PID,因为Windows会重用PID,它们很少变得更大。


41
我看过 PID 编号达到 40 亿的情况。但我经历了很长时间。 - Raymond Chen
1
@RaymondChen :) 谢谢,这个我不知道。 - HerrJoebob
1
我相信Win9x使用内核指针作为PID,因此它们通常在DWORD范围内较高。 - Gabe
1
仅因为PID相关函数返回DWORD并不意味着它们是DWORD;许多函数返回比最大实际值更大的类型。我不确定为什么,但我一直认为PIDs是16位的。快速搜索会发现至少*nix系统(即使是64位的)显然将PIDs限制在32,768个,但我见过一些人提到Windows中的PIDs超过100,000,所以我不确定并正在寻找一些明确的信息。 - Synetech
2
我曾在存在句柄泄漏的应用程序系统上看到过更大的进程ID(达到数百万级别),而这些进程ID并未被释放以供重复使用。 - Greg Askew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接