Windows 7 повторно использует идентификаторы процессов?
Причина, по которой я задаю этот вопрос, заключается в том, что, как мне кажется, Windows XP и Linux никогда не генерируют идентификаторы процессов выше 20–30 КБ. Тем не менее, мой компьютер с Windows 7 достигнет идентификаторов 5-10k или около того в течение нескольких часов после перезагрузки, что является моим обычным опытом в прошлом. На следующее утро я проверяю, и некоторые процессы 250k или выше, что не так.
Я активировал функцию аудита безопасности, чтобы регистрировать создание и завершение процесса. Ничто не порождает сотни или тысячи процессов. Только 513 из этих событий зарегистрированы в течение 24-часового периода, и все же сотни тысяч идентификаторов процессов были использованы.
Я попытался найти свой вопрос, и один из предложенных ранее вопросов указал на чудесный блог Марка Руссиновича . Но эта статья, хотя и очень интересное чтение, оставила меня озадаченным.
источник
Ответы:
Из моего тестирования выясняется, что у вас есть одно ложное предположение, номера PID не выдаются в последовательном порядке. Это очень легко доказать, выполните следующую команду из командной строки. Следует открыть 3 копии блокнота.
На моей машине PID из 3-х копий, которые открывались одновременно.
Как вы можете видеть, что PID сильно перепрыгивает, если вы открываете их по одному, вы также увидите, что следующий PID не всегда больше предыдущего. Например, я открыл 4-ую копию блокнота и получил это
Таким образом, похоже, что Windows 7 будет просто выбирать случайный неиспользуемый PID каждый раз, когда запускает процесс, так что очень хорошо можно использовать PID повторно во время работы Windows без перезагрузки.
Я написал простой скрипт powershell (требуется версия v2 или новее, см. Историю изменений ответов для версии C #), чтобы доказать это наверняка
Запуская программу 10 раз, она всегда между
134
и147
запускает блокнот для повторного использования одного и того же PID (Почему это число так мало? GO-GO Gadget Birthday Problem !)источник
Я провел тест в течение часа, и за это время было завершено 302 процесса. Из них у 70 был общий PID, поэтому я бы сказал, что PID часто используется повторно.
источник