Terminal pogryzł człowieka: ps
Jeżeli ktoś po przeczytaniu nagłówka zakrztusił się herbatą, to znaczy, że już cokolwiek poznał systemy linuksowe. Bowiem polecenie ps jest tak wrośnięte w ich klimaty, że zgoła mało kto zadaje sobie pytanie jak to działa i do czego służy. A warto wiedzieć choćby o paru możliwościach ps, by ułatwić sobie pracę i ewentualną reakcję w sytuacjach kryzysowych.
Jak zapewne wiadomo, polecenie ps wyświetla listę aktualnych procesów. Mogą to być procesy konkretnego użytkownika a dodatkowo dowiemy się, ile zużywają pamięci, mocy CPU, w jakim są stanie i tak dalej. Najczęściej spotykane są te ze statusem R (działające), S (uśpione) lub Z (procesy nieprawidłowo zamknięte – lub wcale – przez swojego rodzica). Żeby jednak nie było za łatwo, ps obsługuje trzy „standardy” wejścia (wpisywanych parametrów) i wyjścia (format wyświetlanych informacji).
1 opcje wg standardu UNIX options, poprzedzone myślnikiem, 2 opcje wg standardu BSD, bez myślnika, 3 opcje wg standardu GNU (długie), poprzedzone dwoma myślnikami.
To powoduje, że niektóre parametry możemy podawać w jednym z trzech tożsamych wariantów (o, -o, --format, p, -p, –pid), niektóre wymagają uwagi (U, -u, --user) a jeszcze inne są z kompletnie różnych światów. Dlatego proste wylistowanie wszystkich procesów można osiągnąć na kilka sposobów:
składnia UNIX ps -e ps -eF ps -elyf składnia BSD ps ax ps aux
Ale to, co szczególnie się może nam przydać (oprócz przeczytania manuala do ps) to sortowanie i wyświetlanie procesów wg kryteriów określonych przez nas samych. Do tego celu musimy zaznajomić się z działaniem formatowania wyjścia, czyli uzyskiwania tych danych, które nas interesują. Do tego celu pomocne są parametry o, -o, --format i wartości, które muszą zawierać się w liście STANDARD FORMAT SPECIFIERS. Najpopularniejsze to:
%cpu - zużycie CPU przez proces, %mem - procentowe zużycie pamięci przez proces (stosunek RSS do ilości pamięci), pid - numer procesu cmd - polecenie z parametrami, comm - polecenie w skróconej formie, rss - realna zajętość pamięci przez proces, user - właściciel procesu
Aby dodatkowo je posortować, należy użyć --sort. Do czego to może być przydatne? Choćby znalezienie procesu najbardziej obciążającego nasz procesor:
ps -eo pid,comm,%cpu --sort -%cpu | head
Jak wiemy, -e oznacza wyświetlenie wszystkich procesów, -o uskutecznia formatowanie opisane przez: pid, comm, %cpu (czyli wyświetlenie tylko informacji o numerze procesu, komendzie i zużyciu przez nie CPU). Następnie sortujemy malejąco (+ rosnąco) i wg której kolumny. Przekierowujemy całość do head, by otrzymać pierwszą dziesiątkę najbardziej uciążliwych procesów. Podobnie możemy posortować procesy wg zużycia pamięci i wyświetlić pełne polecenie (z parametrami).
ps -eo pid,cmd,rss,%cpu --sort -rss | head
A oto wynik:
PID CMD RSS %CPU 3504 /usr/lib/firefox/firefox 737760 13.1 3386 /usr/bin/quiterss -session 276804 0.2 3259 kded5 [kdeinit5] 215728 0.1 3304 /usr/bin/plasmashell --shut 180876 0.3 3284 kwin_x11 -session 10eb70656 104540 1.0 3290 /usr/bin/krunner 85856 0.0 4288 /usr/bin/konsole 74324 0.6 2932 /usr/lib/xorg/Xorg -noliste 70536 2.0 3361 /usr/bin/korgac -session 10 54232 0.0