Linux #9 - proc/pid
Wstęp
Dzień dobry, dziś przekażę informacje o katalogu /proc, który jest jednocześnie partycją oraz zbiorem informacji o procesach w systemie. Jest to jeden artykuł z serii o partycji /proc. Dziś skupimy się na części odpowiedzialnej, za konkretny proces. Serdecznie zapraszam.
Co to ten proc?
/proc jest to bardzo specjalny, wirtualny, pseudo system plików. Udostępnia interfejs do struktur danych kernela. Nie zawiera “prawdziwych” plików, a raczej informacje o pracy systemu tj. pamięć, zamontowane urządzenia, konfiguracja sprzętowa. Co ciekawe, wiele aplikacji po prostu “odpytuje” znajdujące się tu katalogi. Na przykład lsmod
(listowanie modułów kernela) odpytuje katalog /proc/modules
. Przez edycję plików w tym katalogu możemy odczytywać, a nawet zmieniać parametry kernela podczas pracy systemu (w locie).
Obiekt doświadczalny
Do poznania informacji znajdujących się w /proc dla danego programu możemy wykorzystać dowolny proces. Ja natomiast do tego celu wykorzystam prosty program, byśmy mogli mieć wspólną płaszczyznę. Program wyglądał będzie następująco:
bash -c "while [ true ]; do sleep 5; done"&
Po wpisaniu otrzymamy z powrotem PID komendy ([1]). Będzie nam potrzebny do dalszej pracy.
Kilofy w dłoń.
Kiedy mamy już nas PID to zaczynamy od spojrzenia w katalog /proc/PID.
I tu mała uwaga. W zależności od tego, z jakiej dystrybucji i z jakiego kernela korzystacie. może być w tym miejscu więcej lub mniej katalogów. Dla porównania pokaże katalog na wsl2 oraz na fedorze (ta sam a komenda co wyżej)
WSL2 - Debian bullseye
Fedora 34
Co my tu mamy?
Oto kilka katalogów, które możemy tu znaleźć wraz z opisami:
/proc/PID/cmdline
plik zawierający argumenty przekazane do konsoli
Program
batcat
jest narzędziem zewnętrznym, dostępnym przez manager pakietów w niektórych dystrybucjach, przez Homebrew albo źródła batcat
/proc/PID/cwd
Link do katalogu, w którym działa dany proces
Dodam tutaj taką małą historyjkę. Miałem w pewnej pracy problem na serwerze, ale mój kolega postanowił sam się nim zająć. Po chwili pisze do mnie, że nie może znaleźć pliku konfiguracyjnego do aplikacji. Oczywiście na pytanie dot. jego lokalizacji otrzymałem “no w katalogu z aplikacją”. Więc poszukałem PID jego sesji ssh, i podejrzałem ten link w jego sesji. Okazało się, że owszem był w katalogu aplikacji, ale nie tej aplikacji :)
/proc/PID/environ
Zmienne środowiskowe procesu
/proc/PID/exe
Link, do programu binarnego. W tym przypadku interpretera
/proc/PID/fd
Katalog zawierający deskryptory plików dla procesu
/proc/PID/maps
“Mapy” pamięci do plików binarnych i bibliotek
/proc/PID/mem
Pamięć przetrzymywana przez proces (w danym przykładnie plik ten jest pusty)
/proc/PID/root
Link do korzenia/początku systemu plików.
/proc/PID/stat
Status procesu
/proc/PID/statm
Informacje na temat statusu pamięci procesu.
/proc/PID/status
Status procesu w bardziej zrozumiałej formie.
Epilog
Na dziś wystarczy, mam nadzieję, że dowiedziałeś/łaś się czegoś nowego, albo odświeżyłeś/łaś sobie wiedzę. Tak czy inaczej, serdecznie Ci dziękuję, za przeczytanie tego posta. Jeśli masz potrzebę o cos zapytać, kontakt znajdziesz w zakładce “O Mnie”. A teraz życzę miłego dzionka i smacznej kawusi :) Do widzenia.