Что такое дескриптор процесса и что мы можем знать о запущенном процессе через свойство «handle handle» в проводнике задач?
Что такое дескриптор процесса и что мы можем знать о запущенном процессе через свойство «handle handle» в проводнике задач?
Дескриптор процесса - это целочисленное значение, которое идентифицирует процесс в 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).
open()
Системный вызов Windows устарел - docs.microsoft.com/en-gb/cpp/c-runtime-library/reference/open