Czy / proc / PID nadal istnieje, gdy PID nie działa?

11

czy jest możliwe, że taki folder /proc/4587istnieje, chociaż nie ma procesu, który ma PID 4587?

David Dai
źródło
1
Zastanawiasz się, czy sprawdzanie / proc / N jest bezpiecznym / niezawodnym sposobem sprawdzenia, czy PID N działa?
Andy Lester,
Zastanawiałem się, czy teoretycznie może istnieć pozostałość w / proc po zakończeniu procesu.
David Dai

Odpowiedzi:

25

Jeśli /procjest tylko procwierzchowiec (i nikt nie gra sztuczkami z nakładkami), nie, folder oparty na pid istnieje tylko tak długo, jak odpowiedni proces istnieje w pewnym stanie (w tym jako zombie). W rzeczywistości, tuż przed zwróceniem pozycji katalogu dla identyfikatora procesu, jądro ponownie sprawdza istnienie procesu - więc w momencie zwrócenia pozycji katalogu odpowiedni proces nadal tam jest. Dostęp do katalogu rozpoczyna się również od wyszukania odpowiedniego procesu. (Jeśli numery linii się zmienią, poszukaj proc_pident_instantiatei proc_pident_lookup.)

Możesz napotkać problemy spowodowane wyświetleniem listy /proci użyciem wyników później (nawet kilka mikrosekund później): proces może być uruchomiony podczas tworzenia listy /proci zatrzymać się, zanim zaczniesz działać na podstawie wyników.

Stephen Kitt
źródło
3
Co z procesami, które zakończyły wykonywanie, ale wait()nie zostały do ​​nich wywołane?
el.pescado,
2
Dobry punkt @ el.pescado, szybkie sprawdzenie wskazuje, że procesy zombie nadal mają swój katalog. Zaktualizuję swoją odpowiedź, dzięki!
Stephen Kitt
Zasadniczo, jeśli pspokazuje proces, jego /prockatalog powinien istnieć.
Barmar
@Barmar „musi” w rzeczywistości: psuzyskuje dostęp /procdo informacji, które wyświetla.
Stephen Kitt