【问题标题】:What is the maximum process Id on Windows?Windows 上的最大进程 ID 是多少?
【发布时间】:2013-07-25 22:45:20
【问题描述】:

调用DWORD GetProcessId(HANDLE)DWORD GetCurrentProcessId() 可以获得的最大进程ID 是多少?它没有记录在 API 的文档页面上。

【问题讨论】:

    标签: windows winapi process pid


    【解决方案1】:

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

    【讨论】:

    • 但是您从哪里得到 PID 是 DWORD 的概念? “PID 可在 4 上整除”令人困惑且含糊不清。如果您的意思是它们可以被 整除,那么您认为它们是 DWORD 的假设是没有根据的,因为任何数字都可以被 4 整除。如果您的意思是它们在内存中是 DWORD 对齐,那么这又是一个似是而非的假设,因为即使是 char 也可以是 DWORD 对齐的。
    • 我想说你需要将DWORD_MAX (0xFFFFFFFF) 对齐到4。所以最大PID是0xFFFFFFFC。
    • 但是你从哪里得到 DWORD?您链接到的文章中的任何地方都没有“DWORD”一词。是否有文档说 PID 是 DWORD?
    • 可以查看GetProcessId函数。它以 DWORD 形式返回 PID。
    • 请注意,您不应依赖 PID 为 divisible by four。纯属巧合。
    【解决方案2】:

    我找不到关于它的官方声明,但由于它以 DWORD 形式存储和返回,因此您应该假设它可以使用整个 32 位范围。在实际系统中,我从未见过大于 ~200,000 的 PID - 因为 Windows 将重用 PID,它们很少会变大。

    【讨论】:

    • 我见过 40 亿范围内的 PID。但我已经有一段时间了。
    • @RaymondChen :) 谢谢你,我的新人。
    • 我相信 Win9x 使用指向内核的指针作为 PID,因此它们通常在 DWORD 范围内很高。
    • 仅仅因为PID相关函数返回一个DWORD并不一定意味着它们是DWORD;许多函数返回的类型大于最大实际值。我不知道为什么,但我一直认为 PID 是 16 位的。快速搜索会发现至少 *nix 系统(甚至是 64 位系统)显然确实将 PID 限制为 32,768,但是我看到有些人提到 Windows 中的 PID 超过 100,000,所以我不确定并且正在寻找一些确定的信息。
    • 我在具有处理泄漏的应用程序的系统上看到了更大的进程 ID(以百万计),并且进程 ID 不能用于重用。
    猜你喜欢
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多