O que é um identificador de processo?

14

O que é um identificador de processo e o que podemos saber sobre um processo em execução por meio da propriedade "handle count" em um explorador de tarefas?

    
por BlueGene 17.06.2009 / 15:46

2 respostas

23

Um identificador de processo é um valor inteiro que identifica um processo para o Windows. A API do Win32 os chama de HANDLE; alças para windows são chamadas HWND e manipulam para módulos HMODULE.

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

A contagem de identificadores que você vê no Gerenciador de Tarefas é " o número de identificadores de objeto na tabela de objetos do processo ". Na verdade, essa é a soma de todas as alças que esse processo abriu.

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

Além disso, há um limite por processo em vários identificadores. Aqui está um exemplo .

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

    
por 17.06.2009 / 16:06
2

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

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

open() é chamada de sistema retorna um identificador, um inteiro pequeno, não negativo para uso em chamadas de sistema subseqüentes (read (2), write (2), lseek (2), fcntl (2), etc.) .

As alças do Windows são muito semelhantes aos descritores de arquivos (FDs) do Unix.

    
por 05.08.2015 / 16:34