O que é um identificador de processo?

Respostas:

25

Um identificador de processo é um valor inteiro que identifica um processo para o Windows. A API do Win32 os chama de HANDLE; identificadores para janelas são chamados HWND e identificadores para módulos HMODULE.

Threads dentro de processos têm um identificador de thread, e arquivos e outros recursos (como chaves do Registro) também têm identificadores.

A contagem de identificadores que você vê no Gerenciador de tarefas é " o número de identificadores de objetos na tabela de objetos do processo ". Com efeito, esta é a soma de todos os identificadores que esse processo abriu.

Se você não liberar seu identificador para um recurso, outras pessoas poderão não conseguir acessá-lo - é por isso que às vezes você não pode excluir um arquivo porque o Windows afirma que ele está em uso (consulte este artigo sobre vazamentos de identificador e o Process Explorer ).

Além disso, há um limite por processo em várias alças. Aqui está um exemplo .

Em geral, se você está abrindo alças e não fechá-las, é análogo ao vazamento de memória. Você deve descobrir o que está acontecendo e corrigi-lo. Existe um bom artigo do CodeProject sobre vazamentos de identificadores .

crb
fonte
2

Handle é um valor inteiro usado para endereçar um Objeto. Por exemplo:

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

open() is System Call retorna um identificador, um número inteiro pequeno e não negativo para uso em chamadas subseqüentes do sistema (leitura (2), gravação (2), lseek (2), fcntl (2), etc.).

Os identificadores do Windows são muito semelhantes aos descritores de arquivo Unix (FDs).

Premraj
fonte
O janelas open()syscall está obsoleto - docs.microsoft.com/en-gb/cpp/c-runtime-library/reference/open
yoniLavi