Windows 7 会重复使用进程 ID 吗?

Windows 7 会重复使用进程 ID 吗?

Windows 7 会重复使用进程 ID 吗?

我之所以问这个问题,是因为根据我的经验,Windows XP 和 Linux 似乎从未生成过高于 20-30k 的进程 ID。但是,我的 Windows 7 计算机在重新启动后的几个小时内会达到高达 5-10k 左右的 ID,这是我过去的正常经验。第二天早上我检查了一下,发现有些进程是 250k 或更高,但事实并非如此。

我激活了安全审计功能来记录进程的创建和终止。没有任何进程生成,数百或数千个进程。24 小时内仅记录了 513 个此类事件,但似乎使用了数十万个进程 ID。

我尝试搜索我的问题,之前提出的建议问题之一指向Mark Russinovich 的精彩博客。但是这篇文章虽然读起来很有趣,却让我感到困惑。

答案1

从我的测试来看,你有一个错误的假设,PID 编号不是按顺序给出的。这很容易证明,从命令行执行以下命令。它应该打开 3 个记事本副本。

notepad & notepad & notepad

在我的计算机上,这里是同时打开的 3 个副本的 PID。

在此处输入图片描述

如您所见,PID 跳来跳去,如果您一次打开一个,您还会发现下一个 PID 并不总是大于前一个。例如,我打开了记事本的第 4 个副本,得到了这个

在此处输入图片描述

因此看起来 Windows 7 每次启动一个进程时都会选择一个随机的未使用的 PID,因此很可能在 Windows 运行过程中重复使用 PID 而无需重新启动。


我写了一个简单的 powershell 脚本(需要 v2 或更新版本,请参阅此答案编辑历史记录以获取 C# 版本)来证明这一点

$h = new-object 'System.Collections.Generic.HashSet[string]'
do {
    $proc = Start-Process 'notepad' -PassThru
    $id = $proc.Id
    Stop-Process $id
} while ($h.Add($id))
$count = $h.Count
Write-Host "Took $count PIDs to hit a duplicate, the duplicate was $id."

运行该程序 10 次后,每次启动记事本时,总是需要等待一段时间134才能147重新使用相同的 PID(为什么这个数字这么小?GO-GO Gadget生日问题

答案2

我进行了一个小时的测试,在此期间有 302 个进程退出。其中 70 个进程有共同的 PID,因此我认为 PID 被频繁重用。

相关内容