Windows 7 réutilise-t-il les ID de processus?

19

Windows 7 réutilise-t-il les ID de processus?

La raison pour laquelle je pose cette question est due à mon expérience selon laquelle Windows XP et Linux ne semblent jamais générer d'ID de processus supérieurs à 20-30k. Cependant, ma machine Windows 7 atteindra des ID aussi élevés que 5–10k environ en quelques heures après un redémarrage, ce qui est mon expérience normale du passé. Le lendemain matin, je vérifie et certains processus sont 250k ou plus, ce qui n'est pas le cas.

J'ai activé la fonction d'audit de sécurité pour consigner la création et l'arrêt du processus. Rien ne génère des centaines ou des milliers ou des processus. Seuls 513 de ces événements sont enregistrés pour une période de 24 heures, mais des centaines de milliers d'ID de processus ont été utilisés, semble-t-il.

J'ai essayé une recherche pour ma question et l'une des questions suggérées précédemment posées pointait vers le merveilleux blog de Mark Russinovich . Mais cet article, bien que très intéressant à lire, m'a laissé perplexe.

isildur
la source
2
Je parie qu'ils ont réinitialisé après un redémarrage ...
Austin T French
3
Bien sûr qu'ils le font, car il n'y a pas de processus du tout au démarrage, donc tous les PID> 4 ne sont pas utilisés.
grawity
1
Je pense que son point de vue était que, à moins que Windows ne réutilise finalement les PID, il s'épuisera et nécessitera un redémarrage.
Simon Richter

Réponses:

22

D'après mes tests, il semble que vous ayez une fausse hypothèse, les numéros PID ne sont pas donnés dans un ordre séquentiel. C'est très facile à prouver, exécutez la commande suivante à partir de la ligne de commande. Il devrait ouvrir 3 copies du bloc-notes.

notepad & notepad & notepad

Sur ma machine, voici les PID des 3 copies qui s'ouvraient toutes en même temps.

entrez la description de l'image ici

Comme vous pouvez voir beaucoup de sauts du PID, si vous les ouvrez un à la fois, vous verrez également que le PID suivant n'est pas toujours plus grand que le précédent. Par exemple, j'ai ouvert une 4e copie du bloc-notes et j'ai obtenu ceci

entrez la description de l'image ici

Il semble donc que Windows 7 choisira simplement un PID aléatoire inutilisé à chaque démarrage d'un processus, il pourrait donc très bien avoir un PID réutilisé tout au long de l'exécution de Windows sans redémarrage.


J'ai écrit un script PowerShell simple (nécessite la version 2 ou plus récente, voir l'historique des réponses pour une version C #) pour le prouver à coup sûr

$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."

L' exécution du programme 10 fois il a toujours pris entre 134et 147lancements de bloc - notes pour le même PID pour être réutilisés (Pourquoi est - ce si petit nombre? GO-GO Gadget anniversaire problème !)

Scott Chamberlain
la source
5
Windows NT le rend encore plus rapide car les PID sont toujours des multiples de quatre .
grawity
Merci Scott. Existe-t-il un script shell / utilitaire qui pourrait suivre tous les numéros PID des processus et les enregistrer dans un fichier avec le nom du processus qui leur a également été attribué?
isildur
1
Vous pourriez, mais je n'en vois pas l'utilité. Voulez-vous simplement suivre tous les processus démarrés ou vous souciez-vous vraiment du PID?
Scott Chamberlain
À ce stade, je veux juste savoir quel (s) processus est exécuté tant de fois qu'il a poussé les numéros d'identification de processus dans la plage 500k +. Peut-être qu'un processus engendre même des processus. Ce n'est qu'un ordinateur de base win 7, un antivirus et un firefox, un jeu ou deux et nous ne faisons pas grand chose d'autre. Merci pour les réponses.
isildur
J'ai donc supprimé un ancien utilitaire qui indexait les disques durs à l'aide de fichiers batch que quelqu'un avait écrits il y a des années et il s'est avéré que c'était le coupable qui avait généré des nombres PID aussi élevés. Maintenant, la même machine a fonctionné pendant des semaines et le numéro PID le plus élevé à ce jour est 12252.
isildur
1

J'ai effectué un test pendant une heure et pendant ce temps, 302 processus se sont arrêtés. Parmi ceux-ci, 70 avaient un PID en commun, donc je dirais que le PID est réutilisé fréquemment.

Data Munger
la source