Что такое дескриптор процесса?
Что такое дескриптор процесса и что мы можем знать о запущенном процессе через свойство "handle handle" в проводнике задач?
2 ответа
Дескриптор процесса - это целочисленное значение, которое идентифицирует процесс в Windows. Win32 API называет их РУЧКОЙ; дескрипторы для окон называются HWND, а дескрипторы - для модулей HMODULE.
Потоки внутри процессов имеют дескриптор потока, а файлы и другие ресурсы (например, ключи реестра) также имеют дескрипторы.
Количество дескрипторов, которое вы видите в диспетчере задач, равно " количеству дескрипторов объектов в таблице объектов процесса". По сути, это сумма всех дескрипторов, открытых этим процессом.
Если вы не откроете свой дескриптор для ресурса, другие люди могут быть не в состоянии получить к нему доступ - вот почему вы иногда не можете удалить файл, потому что Windows утверждает, что он используется (ознакомьтесь с этой статьей об утечках дескрипторов и Process Explorer).
Кроме того, существует ограничение на процесс для разных дескрипторов. Вот пример.
В общем, если вы открываете ручки, а не закрываете их, это аналогично утечке памяти. Вы должны выяснить, что происходит и исправить это. Есть хорошая статья CodeProject о утечках дескрипторов.
Дескриптор является целочисленным значением, которое используется для адресации Объектов. Например:
int handle = open( "foo.txt", OTHER_STUFF_HERE );
open()
is System Call возвращает дескриптор, небольшое неотрицательное целое число для использования в последующих системных вызовах (read(2), write(2), lseek(2), fcntl(2) и т. д.).
Дескрипторы Windows очень похожи на дескрипторы файлов Unix (FD).