Verwendet Windows 7 Prozess-IDs erneut?

19

Verwendet Windows 7 Prozess-IDs erneut?

Der Grund, warum ich diese Frage stelle, ist meine Erfahrung, dass Windows XP und Linux niemals Prozess-IDs über 20–30 KB generieren. Mein Windows 7-Computer erreicht jedoch innerhalb weniger Stunden nach einem Neustart IDs von etwa 5 bis 10.000. Dies ist meine normale Erfahrung aus der Vergangenheit. Am nächsten Morgen überprüfe ich und einige Prozesse sind 250k oder höher, was nicht der Fall ist.

Ich habe die Sicherheitsüberwachungsfunktion aktiviert, um die Erstellung und Beendigung von Prozessen zu protokollieren. Nichts erzeugt Hunderte oder Tausende oder Prozesse. Nur 513 dieser Ereignisse werden für einen Zeitraum von 24 Stunden registriert, und es scheint, dass Hunderttausende von Prozess-IDs verwendet wurden.

Ich habe versucht, nach meiner Frage zu suchen, und eine der zuvor gestellten Fragen wies auf einen wunderbaren Blog von Mark Russinovich hin . Aber dieser Artikel, obwohl sehr interessant zu lesen, hat mich verwirrt.

isildur
quelle
2
Ich wette, sie wurden nach einem Neustart zurückgesetzt ...
Austin T Französisch
3
Dies ist natürlich der Fall, da beim Start überhaupt keine Prozesse vorhanden sind und daher alle PIDs> 4 nicht verwendet werden.
Grawity
1
Ich denke, sein / ihr Punkt war, dass, wenn Windows PIDs nicht irgendwann wiederverwendet, es ausgeht und ein Neustart erforderlich ist.
Simon Richter

Antworten:

22

Aus meinen Tests geht hervor, dass Sie eine falsche Annahme haben: PID-Nummern werden nicht in sequentieller Reihenfolge ausgegeben. Dies ist sehr einfach zu beweisen, führen Sie den folgenden Befehl über die Befehlszeile aus. Es sollte 3 Kopien des Notizblocks öffnen.

notepad & notepad & notepad

Auf meinem Computer sind hier die PIDs der 3 Kopien, die alle gleichzeitig geöffnet wurden.

Bildbeschreibung hier eingeben

Wie Sie sehen können, springt die PID viel herum. Wenn Sie sie einzeln öffnen, werden Sie auch feststellen, dass die nächste PID nicht immer größer als die vorherige ist. Zum Beispiel habe ich eine 4. Kopie des Notizblocks geöffnet und diese bekommen

Bildbeschreibung hier eingeben

Es sieht also so aus, als würde Windows 7 jedes Mal, wenn ein Prozess gestartet wird, eine zufällige nicht verwendete PID auswählen, sodass eine PID möglicherweise während der Ausführung von Windows ohne Neustart wiederverwendet wird.


Ich habe ein einfaches Powershell-Skript geschrieben (erfordert Version 2 oder neuer, siehe Bearbeitungsverlauf für diese Antwort für eine C # -Version), um es sicher zu beweisen

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

Es dauerte immer zehn Mal, bis das Programm ausgeführt 134und 147der Editor gestartet wurde, damit dieselbe PID wiederverwendet werden konnte. (Warum ist diese Zahl so klein? GO-GO-Gadget- Geburtstagsproblem !)

Scott Chamberlain
quelle
5
Windows NT macht es noch schneller, da PIDs immer ein Vielfaches von vier sind .
Grawity
Vielen Dank, Scott. Gibt es ein Shell-Skript / -Dienstprogramm, das alle PID-Nummern von Prozessen nachverfolgen und diese in einer Datei mit dem Namen des Prozesses protokollieren kann, dem sie ebenfalls zugewiesen wurden?
isildur
1
Sie könnten, aber ich sehe den Nutzen davon nicht. Möchten Sie nur alle gestarteten Prozesse verfolgen oder interessiert Sie die PID wirklich?
Scott Chamberlain
An dieser Stelle möchte ich nur wissen, welche Prozesse so oft ausgeführt werden, dass die Prozess-ID-Nummern in den Bereich von 500.000 + verschoben wurden. Vielleicht bringt ein Prozess sogar Prozesse hervor. Dies ist nur ein grundlegender Win 7-Desktop, Antivirus und Firefox, ein oder zwei Spiele, und wir machen nicht viel anderes. Danke für die Antworten.
Isildur
Also habe ich ein altes Dienstprogramm entfernt, mit dem Laufwerke mithilfe von Batch-Dateien indiziert wurden, die vor Jahren geschrieben wurden, und es stellte sich heraus, dass dies der Schuldige war, der so hohe PID-Zahlen generiert hat. Jetzt läuft die gleiche Maschine seit Wochen und die höchste PID-Nummer bis heute ist 12252.
isildur
1

Ich habe eine Stunde lang einen Test durchgeführt und in dieser Zeit wurden 302 Prozesse beendet. Von diesen hatten 70 eine gemeinsame PID, daher würde ich sagen, dass die PID häufig wiederverwendet wird.

Data Munger
quelle