Windows 7是否重用进程ID?


19

Windows 7是否重用进程ID?

我问这个问题的原因是由于我的经验,Windows XP和Linux似乎从未生成高于20-30k的进程ID。但是,我的Windows 7计算机在重新启动后的几个小时内将达到5-10k左右的ID,这是我过去的正常经验。第二天早上,我检查了一些进程是否为250k或更高,不是。

我激活了安全审核功能,以记录进程的创建和终止。没有什么可以生成成百上千的进程。在24小时内,只有513个这些事件被注册,但是,已经使用了成千上万的进程ID。

我尝试搜索我的问题,以前提出的建议问题之一指向Mark Russinovich的出色博客。但是,尽管这篇文章非常有趣,但让我感到困惑。


2
我敢打赌他们会在重启后重置...
Austin T French

3
当然可以,因为引导启动时根本没有进程,因此所有大于4的PID都不会使用。
grawity 2013年

1
我认为他/她的意思是,除非Windows最终最终重用PID,否则它将用完并需要重新启动。
西蒙·里希特

Answers:


22

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

notepad & notepad & notepad

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

在此处输入图片说明

如您所见,PID跳跃很多,如果一次打开一个PID,您还会看到下一个PID并不总是大于前一个。例如,我打开了第四本记事本,并得到了这个

在此处输入图片说明

因此,似乎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次总是要花之间134147记事本的推出为同一PID被重新使用的(为什么是这个数字如此之小?GO-GO小工具生日问题!)


5
Windows NT使其速度更快,因为PID始终是4的倍数
grawity

谢谢斯科特。是否有一个Shell脚本/实用程序可以跟踪所有进程的PID编号,并将其记录到一个文件中,该文件也带有为其分配的进程的名称?
isildur

1
您可以,但是我看不到它的用处。您是否只想跟踪启动的每个过程,还是真的关心PID?
Scott Chamberlain

在这一点上,我只想知道什么进程正在运行很多次,以至于它将进程ID号推到500k +范围内。也许某个进程甚至正在催生进程。这只是基本的Win 7桌面,防病毒和Firefox,是一两个游戏,我们在此方面不做其他任何事情。感谢您的答复。
isildur 2013年

因此,我删除了一个旧的实用程序,该实用程序使用某人几年前编写的批处理文件对磁盘驱动器进行了索引,事实证明这是产生如此高的PID值的罪魁祸首。现在,在同一台机器有跑了几个星期和最高的PID号日期是12252.
埃西铎

1

我进行了一个小时的测试,然后退出了302个进程。其中有70个具有共同的PID,因此我想说PID经常被重用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.