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

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

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

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

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

11
задан slhck
21.03.2023 20:11 Количество просмотров материала 2544
Распечатать страницу

2 ответа

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

notepad & notepad & notepad

на моей машине вот PID из 3 копий, которые были открыты одновременно.

enter image description here

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

enter image description here

таким образом, кажется, что 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 гаджет Проблема С Днем Рождения!)

22
отвечен Scott Chamberlain 2023-03-23 03:59

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

1
отвечен Data Munger 2023-03-23 06:16

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх