Co to jest uchwyt procesu?

Odpowiedzi:

25

Uchwyt procesu jest wartością całkowitą, która identyfikuje proces w systemie Windows. Win32 API nazywa je UCHWYTEM; uchwyty do okien nazywane są HWND, a uchwyty do modułów HMODULE.

Wątki w procesach mają uchwyt wątku, a pliki i inne zasoby (takie jak klucze rejestru) również mają uchwyty.

Liczba uchwytów widoczna w Menedżerze zadań to „ liczba uchwytów obiektów w tabeli obiektów procesu ”. W efekcie jest to suma wszystkich uchwytów otwartych przez ten proces.

Jeśli nie zwolnisz uchwytu do zasobu, inne osoby mogą nie mieć do niego dostępu - dlatego czasami nie możesz usunąć pliku, ponieważ system Windows twierdzi, że jest on używany (sprawdź ten artykuł na temat wycieków uchwytów i Eksploratora procesów ).

Istnieje również limit na proces dla różnych uchwytów. Oto przykład .

Ogólnie rzecz biorąc, jeśli otwierasz uchwyty, a nie je zamykasz, jest to analogiczne do wycieku pamięci. Powinieneś dowiedzieć się, co się dzieje i to naprawić. Dobry artykuł CodeProject na temat wycieków .

crb
źródło
2

Uchwyt to wartość całkowita, która służy do adresowania obiektów. Na przykład:

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

open() is System Call zwraca uchwyt, małą, nieujemną liczbę całkowitą do użycia w kolejnych wywołaniach systemowych (read (2), write (2), lseek (2), fcntl (2) itd.).

Uchwyty systemu Windows są bardzo podobne do deskryptorów plików systemu Unix (FD).

Premraj
źródło
Wywołanieopen()
systemowe systemu