Windows 7 повторно использует идентификаторы процессов?


19

Windows 7 повторно использует идентификаторы процессов?

Причина, по которой я задаю этот вопрос, заключается в том, что, как мне кажется, Windows XP и Linux никогда не генерируют идентификаторы процессов выше 20–30 КБ. Тем не менее, мой компьютер с Windows 7 достигнет идентификаторов 5-10k или около того в течение нескольких часов после перезагрузки, что является моим обычным опытом в прошлом. На следующее утро я проверяю, и некоторые процессы 250k или выше, что не так.

Я активировал функцию аудита безопасности, чтобы регистрировать создание и завершение процесса. Ничто не порождает сотни или тысячи процессов. Только 513 из этих событий зарегистрированы в течение 24-часового периода, и все же сотни тысяч идентификаторов процессов были использованы.

Я попытался найти свой вопрос, и один из предложенных ранее вопросов указал на чудесный блог Марка Руссиновича . Но эта статья, хотя и очень интересное чтение, оставила меня озадаченным.


2
Могу поспорить, они сбрасываются после перезагрузки ...
Остин Т Френч

3
Конечно, это происходит, потому что при запуске загрузки процессов нет вообще, поэтому все PID> 4 не используются.
grawity

1
Я думаю, что его / ее точка зрения заключалась в том, что, если Windows в конечном итоге не будет повторно использовать PID, она закончится и потребует перезагрузки.
Саймон Рихтер

Ответы:


22

Из моего тестирования выясняется, что у вас есть одно ложное предположение, номера PID не выдаются в последовательном порядке. Это очень легко доказать, выполните следующую команду из командной строки. Следует открыть 3 копии блокнота.

notepad & notepad & notepad

На моей машине PID из 3-х копий, которые открывались одновременно.

введите описание изображения здесь

Как вы можете видеть, что PID сильно перепрыгивает, если вы открываете их по одному, вы также увидите, что следующий PID не всегда больше предыдущего. Например, я открыл 4-ую копию блокнота и получил это

введите описание изображения здесь

Таким образом, похоже, что Windows 7 будет просто выбирать случайный неиспользуемый PID каждый раз, когда запускает процесс, так что очень хорошо можно использовать PID повторно во время работы Windows без перезагрузки.


Я написал простой скрипт 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 Birthday Problem !)


5
Windows NT делает это еще быстрее, потому что PID всегда кратны четырем .
grawity

Спасибо Скотт. Существует ли сценарий / утилита оболочки, которая может отслеживать все PID-номера процессов и записывать их в файл с именем процесса, которому они также были назначены?
isildur

1
Можно, но я не вижу в этом полезности. Вы просто хотите отслеживать все запущенные процессы или действительно заботитесь о PID?
Скотт Чемберлен

На данный момент, я просто хочу знать, какой процесс (ы) запускается так много раз, что он выдвинул номера идентификатора процесса в диапазон 500k +. Возможно, процесс порождает даже процессы. Это просто базовый рабочий стол win 7, антивирус и firefox, игра или два, и мы больше ничего не делаем для этого. Спасибо за ответы.
isildur

Поэтому я удалил старую утилиту, которая индексирует дисковые накопители, используя пакетные файлы, которые кто-то написал несколько лет назад, и оказалось, что именно это и послужило причиной создания таких высоких чисел PID. Теперь одна и та же машина работала неделями, и самый высокий на сегодняшний день номер PID - 12252.
isildur

1

Я провел тест в течение часа, и за это время было завершено 302 процесса. Из них у 70 был общий PID, поэтому я бы сказал, что PID часто используется повторно.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.