Czy system Windows 7 ponownie wykorzystuje identyfikatory procesów?

19

Czy system Windows 7 ponownie wykorzystuje identyfikatory procesów?

Powód, dla którego zadaję to pytanie, wynika z mojego doświadczenia, że ​​Windows XP i Linux nigdy nie wydają identyfikatorów procesów wyższych niż 20–30 000. Jednak mój komputer z systemem Windows 7 osiągnie ID około 5–10 000 w ciągu kilku godzin po ponownym uruchomieniu, co jest moim normalnym doświadczeniem z przeszłości. Następnego ranka sprawdzam, a niektóre procesy mają 250k lub więcej, co nie jest.

Aktywowałem funkcję kontroli bezpieczeństwa, aby zarejestrować tworzenie i zakończenie procesu. Nic nie generuje setek, tysięcy ani procesów. Tylko 513 z tych zdarzeń jest rejestrowanych na okres 24 godzin, ale wydaje się, że wykorzystano setki tysięcy identyfikatorów procesów.

Próbowałem wyszukać moje pytanie, a jedno z sugerowanych wcześniej pytań wskazywało na cudowny blog Marka Russinovicha . Ale ten artykuł, choć bardzo interesujący, sprawia, że ​​jestem zaskoczony.

isildur
źródło
2
Założę się, że resetują się po ponownym uruchomieniu ...
Austin T French
3
Oczywiście, że tak, ponieważ nie ma żadnych procesów podczas uruchamiania, dlatego wszystkie PID> 4 są nieużywane.
grawity
1
Myślę, że jego / jej celem było to, że jeśli Windows ostatecznie nie użyje PID-ów, skończy się i będzie wymagać ponownego uruchomienia.
Simon Richter

Odpowiedzi:

22

Z moich testów wynika, że ​​masz jedno fałszywe założenie, numery PID nie są wydawane w kolejności sekwencyjnej. Jest to bardzo łatwe do udowodnienia, wykonaj następujące polecenie z wiersza poleceń. Powinien otworzyć 3 kopie notatnika.

notepad & notepad & notepad

Na mojej maszynie znajdują się PID 3 kopii, które wszystkie otworzyły się w tym samym czasie.

wprowadź opis zdjęcia tutaj

Jak widać, PID często skacze, jeśli otworzysz je pojedynczo, zobaczysz również, że następny PID nie zawsze jest większy niż poprzedni. Na przykład otworzyłem 4. kopię notatnika i dostałem to

wprowadź opis zdjęcia tutaj

Wygląda więc na to, że Windows 7 wybierze losowo nieużywany PID za każdym razem, gdy rozpoczyna proces, więc bardzo dobrze PID może zostać ponownie użyty podczas uruchamiania systemu Windows bez ponownego uruchamiania.


Napisałem prosty skrypt PowerShell (wymaga wersji 2 lub nowszej, zobacz historię edycji odpowiedzi dla wersji C #), aby to na pewno udowodnić

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

Uruchomienie programu 10 razy, które zawsze trwało, 134i 147uruchomienie notatnika, aby ponownie użyć tego samego PID (Dlaczego ta liczba jest tak mała? Problem z gadżetem GO-GO !)

Scott Chamberlain
źródło
5
Windows NT sprawia, że ​​jest jeszcze szybszy, ponieważ PID są zawsze wielokrotnością czterech .
grawity
Dzięki Scott. Czy istnieje skrypt / narzędzie powłoki, które może śledzić wszystkie numery PID procesów i logować je do pliku z nazwą przypisanego im procesu?
isildur
1
Możesz, ale nie widzę jego przydatności. Czy chcesz tylko śledzić każdy rozpoczęty proces, czy naprawdę zależy Ci na PID?
Scott Chamberlain,
W tym momencie chcę tylko wiedzieć, który proces jest uruchamiany tyle razy, że wypchnął numery identyfikacyjne procesu do zakresu 500k +. Być może nawet proces się odradza. To tylko podstawowy wygrany pulpit 7, program antywirusowy i Firefox, gra lub dwie i nie robimy na tym wiele więcej. Dziękuję za odpowiedzi.
isildur
Więc usunąłem stare narzędzie, które indeksowało dyski za pomocą plików wsadowych, które ktoś napisał lata temu, i okazuje się, że był to winowajca generujący tak wysokie liczby PID. Teraz ta sama maszyna działała od tygodni, a najwyższy jak dotąd numer PID to 12252.
isildur
1

Przeprowadziłem test przez godzinę iw tym czasie zakończyło się 302 procesy. Spośród nich 70 miało wspólny PID, więc powiedziałbym, że PID jest często ponownie wykorzystywany.

Data Munger
źródło