Я замечаю дескриптор приложения, когда использую функцию оболочки для его открытия. Затем я использую этот дескриптор, чтобы позже закрыть приложение. Однако пользователь также может сам закрыть это другое приложение. Может ли этот дескриптор повторно использоваться окнами, чтобы при использовании этого дескриптора я закрывал другой процесс. Если это возможно, то это вероятно?
Как часто повторно используются дескрипторы процессов
Ответы (2)
Нет, тебе не о чем беспокоиться. Дескриптор, возвращаемый, скажем, OpenProcess, ShellExecuteEx() или CreateProcess, сохраняет объект процесса живым. Вот как можно вызвать GetExitCodeProcess() для получения кода выхода после завершения процесса.
Объект не освобождается до тех пор, пока последний дескриптор на нем не будет закрыт. Вопреки более ранним советам, данным в этой теме, очень важно, чтобы вы вызывали CloseHandle(), иначе у вас будет утечка.
person
Hans Passant
schedule
29.11.2009
Спасибо, но я не совсем понимаю. Утечка памяти здесь из-за того, что closehandle() не вызывается. Будет ли это прояснено после того, как приложение, выполнившее вызов оболочки, будет правильно закрыто?
- person jjb; 29.11.2009
Да, Windows очищает дескрипторы, которые не были закрыты. Не позволяйте этому зайти так далеко.
- person Hans Passant; 29.11.2009
не просто вызвать sendmessage Call SendMessage(intHandle, const_CLOSE, 0&, 0&) и закрыть приложение, и выполнить работу closehandle() одновременно?
- person jjb; 29.11.2009
Вы можете дождаться дескриптора процесса, чтобы выяснить, когда он вышел.
WaitForSingleObject(hProcess, INFINITE);
Как только это вернется, вы знаете, что процесс завершился, и вам не нужно его закрывать.
person
Roland Rabien
schedule
29.11.2009
Нет, вызов CloseHandle() необходим, чтобы избежать утечки.
- person Hans Passant; 29.11.2009
спасибо за это, но похоже, что дескриптор не будет использоваться повторно, потому что он остается открытым, пока приложение, выполнившее команду оболочки, не закроет его.
- person jjb; 29.11.2009