2014-10-10 1 views
10

У меня есть эта небольшая пробная программа, которая отслеживает PID, когда они созданы и закрыты. Я исследую проблему, которую нашел моя прогайка, и хотел бы спросить вас об этом , чтобы получить лучшее представление о том, что происходит.Включает ли идентификационные номера (7) идентификатора процесса (7) для Windows 7?

Когда запускается процесс окна, он получает PID, но когда процесс остановлен, делает PID стать отставным (например, номер джерси звездочки баскетболиста), или возможно для нового, целиком несвязанного, процесса который будет создан под выпущенным PID?

Благодаря

+0

Да, это так. Таким образом, вы должны держать ручку в процессе, чтобы убедиться, что он все еще жив - до тех пор, пока он будет, идентификатор останется прежним. – Luaan

ответ

14

Да, идентификаторы процесса могут быть переработаны системой. Они становятся доступными для этого, как только последний дескриптор процесса был закрыт.

Рэймонд Чен обсуждали этот вопрос здесь: When does a process ID become available for reuse?

Процесс ID является значение, связанное с объектом процесса, а также пор, как объект процесса все еще вокруг, так что тоже будет процесс его ID. Объект процесса остается до тех пор, пока процесс все еще работает (процесс неявно сохраняет ссылку на себя) или до тех пор, пока у кого-то еще есть дескриптор объекта процесса.

Если вы думаете об этом, это имеет смысл, потому что до тех пор, пока существует еще дескриптор процесса, кто-то может назвать WaitForSingleObject ждать процесса, чтобы выйти, или они могут позвонить GetExitCodeProcess , чтобы получить код выхода, и этот код выхода должен быть сохранен где-то для последующего поиска.

Когда все дескрипторы закрыты, ядро ​​знает, что никто не собирается узнать, продолжает ли процесс или что его выход код (потому что вам нужен дескриптор, чтобы задать эти вопросы). При котором указывает, что объект процесса может быть уничтожен, что, в свою очередь, разрушает идентификатор процесса .

+0

Таким образом, это означает, что вместо идентификатора процесса он должен называться Running Process Identifier, поскольку он не идентифицирует один процесс. –

4

Очевидно, что если процесс завершается, его PID доступен для повторного использования.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms683215%28v=vs.85%29.aspx

Заметки

До тех пор пока процесс не завершится, его идентификатор процесса однозначно идентифицирует его в системе. Дополнительные сведения о правах доступа см. В разделе «Безопасность процессов и права доступа».

7

Я провел тест около часа, и за это время 302 процессов выходов и 70 из них имели общие идентификаторы (один и тот же PID использовался для нового процесса). Так что бы сказать, что они часто используются повторно.

Смежные вопросы