O Windows 7 reutiliza os IDs do processo?

18

O Windows 7 reutiliza os IDs do processo?

A razão pela qual eu faço essa pergunta é devido à minha experiência que o Windows XP e o Linux nunca parecem gerar IDs de processo maiores que 20–30k. No entanto, minha máquina com Windows 7 alcançará IDs de 5 a 10k ou mais dentro de algumas horas após a reinicialização, que é a minha experiência normal do passado. Na manhã seguinte eu verifico e alguns processos são 250k ou mais, o que não é.

Ativei o recurso de auditoria de segurança para registrar a criação e a finalização do processo. Nada está gerando centenas ou milhares ou processos. Apenas 513 desses eventos são registrados por um período de 24 horas, mas centenas de milhares de IDs de processo foram usados.

Eu tentei uma pesquisa para a minha pergunta e uma das perguntas sugeridas anteriormente apontou para um Blog maravilhoso de Mark Russinovich . Mas este artigo, embora seja uma leitura muito interessante, me deixou perplexo.

    
por isildur 25.08.2013 / 19:17

2 respostas

22

Do meu teste, parece que você tem uma suposição falsa, os números PID não são dados em ordem seqüencial. Isso é muito fácil de provar, faça o seguinte comando na linha de comando. Deve abrir 3 cópias do bloco de notas.

notepad & notepad & notepad

Na minha máquina, aqui estão as PIDs das 3 cópias que abriram ao mesmo tempo.

ComovocêpodeveroPIDpulandomuito,Sevocêosabrirumdecadavez,tambémveráqueopróximoPIDnemsempreémaiorqueoanterior.Porexemplo,euabriumaquartacópiadoblocodenotasepegueiisto

Portanto, parece que o Windows 7 selecionará um PID aleatório não utilizado toda vez que iniciar um processo, portanto, muito bem poderia ter um PID reutilizado durante a execução das janelas sem reinicialização.

Eu escrevi um script simples de powershell (requer v2 ou mais recente, veja isso responde ao histórico de edição para uma versão em C #) para provar com certeza

$h = new-object 'System.Collections.Generic.HashSet[string]'
do {
    $proc = Start-Process 'notepad' -PassThru
    $id = $proc.Id
    Stop-Process $id
} while ($h.Add($id))
$count = $h.Count
Write-Host "Took $count PIDs to hit a duplicate, the duplicate was $id."

Rodando o programa 10 vezes, sempre foi gasto entre 134 e 147 lançamentos do bloco de notas para o mesmo PID ser reutilizado (Por que esse número é tão pequeno? GO-GO Gadget Problema de aniversário !)

    
por 25.08.2013 / 20:09
1

Eu fiz um teste por uma hora e, nesse período, 302 processos foram encerrados. Desses, 70 tinham um PID em comum, então eu diria que o PID é reutilizado com frequência.

    
por 07.07.2015 / 02:40