Что такое дескриптор процесса?

Ответы:

25

Дескриптор процесса - это целочисленное значение, которое идентифицирует процесс в Windows. Win32 API называет их РУЧКОЙ; дескрипторы окон называются HWND, а дескрипторы модулей HMODULE.

Потоки внутри процессов имеют дескриптор потока, а файлы и другие ресурсы (например, ключи реестра) также имеют дескрипторы.

Количество дескрипторов, которое вы видите в диспетчере задач, равно « количеству дескрипторов объектов в таблице объектов процесса ». По сути, это сумма всех дескрипторов, открытых этим процессом.

Если вы не передадите свой дескриптор ресурсу, другие люди могут не иметь к нему доступа - вот почему вы иногда не можете удалить файл, потому что Windows утверждает, что он используется (ознакомьтесь с этой статьей об утечках дескрипторов и Process Explorer ).

Кроме того, существует ограничение на процесс для разных дескрипторов. Вот пример .

В общем, если вы открываете ручки, а не закрываете их, это аналогично утечке памяти. Вы должны выяснить, что происходит и исправить это. Есть хорошая статья CodeProject о утечках дескрипторов .

CRB
источник
2

Дескриптор является целочисленным значением, которое используется для адресации Объектов. Например:

int handle = open( "foo.txt", OTHER_STUFF_HERE );

open() is System Call возвращает дескриптор, небольшое неотрицательное целое число для использования в последующих системных вызовах (read (2), write (2), lseek (2), fcntl (2) и т. д.).

Дескрипторы Windows очень похожи на дескрипторы файлов Unix (FD).

Premraj
источник
open()Системный вызов Windows устарел - docs.microsoft.com/en-gb/cpp/c-runtime-library/reference/open
yoniLavi