Что происходит с дескриптором процесса после его завершения? - PullRequest
2 голосов
/ 30 июня 2011

если у меня есть дескриптор какого-либо процесса Windows, который остановился (уничтожен или только что завершился):

  1. Будет ли дескриптор (или лучше память за ним) повторно использован для другого процесса?
  2. Или GetExitCodeProcess (), например, с сегодняшнего дня получит правильный результат навсегда?

Если 1. верно: Как долго будет работать GetExitCodeProcess ()?
Если 2. верно: не означает ли это, что я могу закрыть ОС запуском / уничтожением новых процессов, поскольку я создаю все больше и больше дескрипторов (и ОС резервирует для них память)?

I 'Я немного смущен концепцией ручек.

Заранее спасибо!

Ответы [ 2 ]

7 голосов
/ 30 июня 2011

Дескриптор косвенно указывает на объект ядра. Пока есть открытые ручки, объект будет оставаться живым.

Будет ли дескриптор (или лучше память за ним) повторно использоваться для другого процесса?

Числовое значение дескриптора (или как оно реализовано) может быть использовано повторно, но это не значит, что оно всегда будет указывать на одно и то же. Так же, как идентификаторы процессов.

Или GetExitCodeProcess (), например, теперь будет всегда получать правильный результат?

Нет. Когда все дескрипторы процесса закрыты, объект процесса освобождается (вместе с его кодом выхода). Обратите внимание, что запущенный процесс содержит в себе неявный дескриптор. Вы можете держать открытую ручку, пока вам это нужно.

Если 2. верно: не означает ли это, что я могу выключить ОС, запуская / убивая новые процессы, поскольку я создаю все больше и больше дескрипторов (и ОС резервирует память для них)?

Есть много способов заморозить систему. Он либо начнет сильно менять, либо просто не сможет запустить новый процесс в какой-то момент.

1 голос
/ 30 июня 2011

Краткий ответ:

GetExitCodeProcess работает до тех пор, пока вы не вызовете CloseHandle, после чего объект процесса будет освобожден и может быть использован повторно.

Длинный ответ: см. Ответ Cat Plus Plus.

...