isi*_*dur 19 windows windows-7 task-manager pid
Windows 7 是否重用进程 ID?
我问这个问题的原因是由于我的经验,Windows XP 和 Linux 似乎从未生成高于 20-30k 的进程 ID。但是,我的 Windows 7 机器在重新启动后的几个小时内会达到高达 5-10k 左右的 ID,这是我过去的正常体验。第二天早上我检查,有些进程是 250k 或更高,这不是。
我激活了安全审计功能来记录进程的创建和终止。没有任何东西会产生成百上千或过程。这些事件中只有 513 个在 24 小时内注册,但似乎已经使用了数十万个进程 ID。
我尝试搜索我的问题,之前提出的建议问题之一指向Mark Russinovich 的精彩博客。但是这篇文章虽然读起来很有趣,但让我感到困惑。
Sco*_*ain 22
从我的测试来看,您似乎有一个错误的假设,即 PID 编号不是按顺序给出的。这很容易证明,从命令行执行以下命令。它应该打开 3 个记事本副本。
notepad & notepad & notepad
Run Code Online (Sandbox Code Playgroud)
在我的机器上,这里是所有同时打开的 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."
Run Code Online (Sandbox Code Playgroud)
运行程序10次总是要花之间134和147记事本的推出为同一PID被重新使用的(为什么是这个数字如此之小?GO-GO小工具生日问题!)
| 归档时间: |
|
| 查看次数: |
7218 次 |
| 最近记录: |