2014-10-10 24 views
10

Mam ten mały test progresywny, który śledzi PID, gdy są one tworzone i wyłączane. Prowadzę dochodzenie w sprawie problemu, który wykrył mój proggy i chciałbym zapytać o to , aby mieć lepszy pogląd na to, co się dzieje.Czy system Windows 7 przetwarza numery identyfikacyjne procesów (PID)?

Gdy proces Windows jest uruchomiona, to dostaje PID ale gdy proces jest zamknięty, czy PID zostać emeryturę (jak numer koszulki gwiazdą Basketballer za) czy jest to możliwe w nowym, całkowicie niespokrewnionego, procesu być stworzonym na podstawie wydanego PID?

Dzięki

+0

Tak, robi. Więc musisz zachować kontrolę nad procesem, aby upewnić się, że wciąż żyje - tak długo jak to jest, identyfikator pozostanie taki sam. – Luaan

Odpowiedz

14

Tak, identyfikatory procesów mogą zostać poddane recyklingowi przez system. Stają się do tego dostępni, gdy tylko ostatni uchwyt procesu zostanie zamknięty.

Raymond Chen omówiła tę sprawę tutaj: When does a process ID become available for reuse?

Identyfikator procesu jest wartością związany z przedmiotem procesu, a jako ile obiekt procesu jest wciąż wokół, tak też będzie jego proces ID. Obiekt procesu pozostaje tak długo, jak proces nadal działa (proces niejawnie zachowuje odniesienie do niego) lub tak długo, jak ktoś nadal ma uchwyt do obiektu procesu.

Jeśli myślisz o tym, że to ma sens, ponieważ tak długo, jak istnieje nadal uchwyt do procesu, ktoś może zadzwonić WaitForSingleObject czekać na proces, aby zakończyć, lub mogą wywołać GetExitCodeProcess aby pobrać kod wyjścia, a ten kod wyjścia musi być przechowywany gdzieś w celu późniejszego odzyskania.

Gdy wszystkie uchwyty są zamknięte, to jądro wie, że nikt nie jest zapytać, czy proces nadal trwa, czy jaki jest jego kod wyjścia (ponieważ potrzebujesz uchwytu, aby zadać te pytania). Na którym punkt obiekt procesu może zostać zniszczony, co z kolei niszczy ID procesu .

+0

Oznacza to, że zamiast identyfikatora procesu powinien on być nazywany Aktywnym identyfikatorem procesu, ponieważ nie identyfikuje pojedynczego procesu. –

7

Przeprowadziłem test przez około godzinę iw tym czasie 302 przetwarzało wyjścia, a 70 miało wspólne PIDy (ten sam PID był używany w nowym procesie). To by znaczyło, że są często używane ponownie.