PID Namespace
Podstawowe informacje
Przestrzeń nazw PID (Process IDentifier) to funkcja w jądrze Linuxa, która zapewnia izolację procesów poprzez umożliwienie grupie procesów posiadanie własnego zestawu unikalnych PID-ów, oddzielnych od PID-ów w innych przestrzeniach nazw. Jest to szczególnie przydatne w konteneryzacji, gdzie izolacja procesów jest niezbędna dla bezpieczeństwa i zarządzania zasobami.
Po utworzeniu nowej przestrzeni nazw PID, pierwszy proces w tej przestrzeni jest przypisany do PID 1. Ten proces staje się procesem "init" nowej przestrzeni nazw i jest odpowiedzialny za zarządzanie innymi procesami w tej przestrzeni. Każdy kolejny proces utworzony w tej przestrzeni będzie miał unikalny PID w ramach tej przestrzeni, a te PID-y będą niezależne od PID-ów w innych przestrzeniach nazw.
Z perspektywy procesu w przestrzeni nazw PID, może on widzieć tylko inne procesy w tej samej przestrzeni nazw. Nie jest świadomy procesów w innych przestrzeniach nazw i nie może z nimi współdziałać za pomocą tradycyjnych narzędzi zarządzania procesami (np. kill
, wait
, itp.). Zapewnia to poziom izolacji, który pomaga zapobiegać wzajemnym zakłóceniom procesów.
Jak to działa:
Po utworzeniu nowego procesu (np. za pomocą wywołania systemowego
clone()
), proces ten może zostać przypisany do nowej lub istniejącej przestrzeni nazw PID. Jeśli utworzona zostanie nowa przestrzeń nazw, proces staje się procesem "init" tej przestrzeni.Jądro utrzymuje mapowanie między PID-ami w nowej przestrzeni nazw a odpowiadającymi PID-ami w przestrzeni nadrzędnej (tj. przestrzeni, z której utworzono nową przestrzeń nazw). To mapowanie umożliwia jądrze tłumaczenie PID-ów, gdy jest to konieczne, na przykład podczas wysyłania sygnałów między procesami w różnych przestrzeniach nazw.
Procesy w ramach przestrzeni nazw PID mogą widzieć i współdziałać tylko z innymi procesami w tej samej przestrzeni nazw. Nie są świadome procesów w innych przestrzeniach nazw, a ich PID-y są unikalne w ramach ich przestrzeni.
Po zniszczeniu przestrzeni nazw PID (np. gdy proces "init" przestrzeni opuści), wszystkie procesy w tej przestrzeni zostaną zakończone. Zapewnia to, że wszystkie zasoby związane z przestrzenią nazw są odpowiednio oczyszczone.
Laboratorium:
Utwórz różne przestrzenie nazw
CLI
Montując nową instancję systemu plików /proc
przy użyciu parametru --mount-proc
, zapewniasz, że nowa przestrzeń nazw montowania ma dokładny i izolowany widok na informacje o procesach specyficzne dla tej przestrzeni nazw.
Docker
Sprawdź, w jakim przestrzeni nazw znajduje się Twój proces
Aby sprawdzić, w jakiej przestrzeni nazw znajduje się Twój proces, wykonaj poniższą komendę:
Zastąp <PID>
odpowiednim identyfikatorem procesu, który chcesz sprawdzić. Komenda ta wyświetli listę plików reprezentujących różne przestrzenie nazw, w których działa dany proces.
Znajdź wszystkie przestrzenie nazw PID
Należy zauważyć, że użytkownik root z początkowego (domyślnego) przestrzeni nazw PID może zobaczyć wszystkie procesy, nawet te w nowych przestrzeniach nazw PID, dlatego możemy zobaczyć wszystkie przestrzenie nazw PID.
Wejście do przestrzeni nazw PID
Kiedy wejdziesz do przestrzeni nazw PID z przestrzeni nazw domyślnej, nadal będziesz mógł zobaczyć wszystkie procesy. Proces z tej przestrzeni nazw PID będzie również mógł zobaczyć nową powłokę bash w przestrzeni nazw PID.
Ponadto, możesz wejść do innej przestrzeni nazw PID procesu tylko jako root. I nie możesz wejść do innej przestrzeni nazw bez deskryptora wskazującego na nią (np. /proc/self/ns/pid
).
Referencje
Last updated