Qu'est-ce qu'une poignée de processus?

Réponses:

25

Un descripteur de processus est une valeur entière qui identifie un processus pour Windows. L'API Win32 les appelle un HANDLE; les poignées des fenêtres sont appelées HWND et les poignées des modules HMODULE.

Les threads à l'intérieur des processus ont un handle de thread, et les fichiers et autres ressources (telles que les clés de registre) ont également des poignées.

Le nombre de descripteurs que vous voyez dans le Gestionnaire des tâches est " le nombre de descripteurs d'objet dans la table d'objets du processus ". En fait, il s'agit de la somme de tous les descripteurs ouverts par ce processus.

Si vous ne libérez pas votre handle vers une ressource, d'autres personnes ne pourront peut-être pas y accéder - c'est pourquoi vous ne pouvez parfois pas supprimer un fichier car Windows prétend qu'il est en cours d'utilisation (consultez cet article sur les fuites de handle et Process Explorer ).

En outre, il existe une limite par processus sur différentes poignées. Voici un exemple .

En général, si vous ouvrez des poignées et ne les fermez pas, cela est analogue à une fuite de mémoire. Vous devez comprendre ce qui se passe et y remédier. Il existe un bon article CodeProject sur les fuites de poignée .

crb
la source
2

Handle est une valeur entière qui est utilisée pour adresser un objet. Par exemple:

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

open() is System Call renvoie un handle, un petit entier non négatif à utiliser dans les appels système ultérieurs (read (2), write (2), lseek (2), fcntl (2), etc.).

Les descripteurs Windows sont très similaires aux descripteurs de fichiers Unix (FD).

Premraj
la source
L' open()appel système Windows est obsolète - docs.microsoft.com/en-gb/cpp/c-runtime-library/reference/open
yoniLavi