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.

l91

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)

l92

WSL2 - Debian bullseye

l93

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

l94

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

l95

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

l96

/proc/PID/exe

Link, do programu binarnego. W tym przypadku interpretera

l97

/proc/PID/fd

Katalog zawierający deskryptory plików dla procesu

l98

/proc/PID/maps

“Mapy” pamięci do plików binarnych i bibliotek

l99

/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.

l910

/proc/PID/stat

Status procesu

l911

/proc/PID/statm

Informacje na temat statusu pamięci procesu.

l912

/proc/PID/status

Status procesu w bardziej zrozumiałej formie.

l913

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.