O Windows 7 reutiliza identificações de processo?

19

O Windows 7 reutiliza identificações de processo?

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

Ativei o recurso de auditoria de segurança para registrar a criação e 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; no entanto, centenas de milhares de IDs de processo foram usados.

Tentei pesquisar minha pergunta e uma das perguntas sugeridas anteriormente apontou para o maravilhoso blog de Mark Russinovich . Mas este artigo, embora seja uma leitura muito interessante, me deixou perplexo.

isildur
fonte
2
Aposto que repor após uma reinicialização ...
Austin T Francês
3
É claro que sim, porque não há processos quando a inicialização é iniciada; portanto, todos os PIDs> 4 não são utilizados.
grawity
1
Penso que o argumento dele / dela era que, a menos que o Windows reutilize PIDs, ele acabará e exigirá uma reinicialização.
Simon Richter

Respostas:

22

Pelo meu teste, parece que você tem uma suposição falsa: os números PID não são fornecidos em ordem sequencial. Isso é muito fácil de provar, execute 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 os PIDs das 3 cópias que foram abertas ao mesmo tempo.

insira a descrição da imagem aqui

Como você pode ver os PIDs saltando bastante, se você os abrir um de cada vez, também verá que o próximo PID nem sempre é maior que o anterior. Por exemplo, abri uma quarta cópia do bloco de notas e peguei este

insira a descrição da imagem aqui

Portanto, parece que o Windows 7 escolhe apenas um PID aleatório não utilizado toda vez que inicia um processo; portanto, é muito bom que um PID seja reutilizado durante a execução do Windows sem uma reinicialização.


Eu escrevi um script simples do PowerShell (requer v2 ou mais recente; consulte este histórico de edições das respostas 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."

Executar o programa 10 vezes que sempre foi necessário entre 134e 147inicia o bloco de notas para que o mesmo PID seja reutilizado (por que esse número é tão pequeno? Problema de aniversário do gadget GO-GO !)

Scott Chamberlain
fonte
5
O Windows NT torna ainda mais rápido, porque os PIDs são sempre múltiplos de quatro .
grawity
Obrigado Scott. Existe um script shell / utilitário que possa rastrear todos os números de PID dos processos e registrá-lo em um arquivo com o nome do processo ao qual eles foram atribuídos também?
Isildur
1
Você poderia, mas não vejo a utilidade disso. Você só quer acompanhar todos os processos iniciados ou realmente se importa com o PID?
Scott Chamberlain
Neste ponto, eu só quero saber quais processos estão sendo executados tantas vezes que empurraram os números de identificação do processo para o intervalo de 500k +. Talvez um processo esteja gerando processos mesmo. Este é apenas um win 7 básico para desktop, antivírus e firefox, um jogo ou dois e não fazemos muito mais. Obrigado pelas respostas.
Isildur
Então, removi um utilitário antigo que indexava unidades de disco usando arquivos em lotes que alguém havia escrito anos atrás e, por acaso, esse era o culpado por gerar números PID tão altos. Agora, a mesma máquina tem correu por semanas eo maior número PID até à data é 12252.
Isildur
1

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.

Data Munger
fonte