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.
źródło
Odpowiedzi:
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.
Na mojej maszynie znajdują się PID 3 kopii, które wszystkie otworzyły się w tym samym czasie.
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
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ć
Uruchomienie programu 10 razy, które zawsze trwało,
134
i147
uruchomienie notatnika, aby ponownie użyć tego samego PID (Dlaczego ta liczba jest tak mała? Problem z gadżetem GO-GO !)źródło
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.
źródło