Jak używać polecenia ps do monitorowania procesów w systemie Linux

Uzyskaj migawkę procesów uruchomionych na komputerze z systemem Linux za pomocą polecenia ps. Lokalizuj procesy według nazwy, użytkownika, a nawet terminala, podając tak dużo lub tak mało szczegółów, jak potrzebujesz. Pokażemy Ci, jak to zrobić.

Zarządzanie procesami w systemie Linux

Sercem wszystkich systemów operacyjnych Linux i Unix-podobnych jest jądro. Do jego wielu obowiązków należy przydzielanie zasobów systemowych, takich jak pamięć RAM i czas procesora. Muszą one być żonglowane w czasie rzeczywistym, aby wszystkie uruchomione procesy miały sprawiedliwy udział, zgodnie z priorytetem każdego zadania.

Czasami zadania mogą się blokować, zapętlać się lub przestać odpowiadać z innych powodów. Lub mogą nadal działać, ale pochłaniają zbyt dużo czasu procesora lub pamięci RAM lub zachowują się w równie antyspołeczny sposób. Czasami zadania muszą zostać zabite jako litość dla wszystkich zaangażowanych. Pierwszy krok. Oczywiście ma na celu zidentyfikowanie danego procesu.

Ale może nie masz żadnych problemów z zadaniami lub wydajnością. Być może jesteś po prostu ciekawy, które procesy działają w twoim komputerze i chciałbyś zajrzeć pod maskę. Polecenie ps spełnia obie te potrzeby. To daje Ci migawka tego, co dzieje się wewnątrz komputera „teraz.”

ps jest na tyle elastyczny, że dostarcza dokładnie potrzebnych informacji w dokładnie takim formacie, jaki chcesz. W rzeczywistości ps ma wiele opcji. Opisane tutaj opcje zaspokoją większość typowych potrzeb. Jeśli potrzebujesz zagłębić się w ps niż to, które omówiliśmy w tym artykule, przekonasz się, że nasze wprowadzenie sprawia, że ​​strona podręcznika jest łatwiejsza do przyswojenia.

Procesy aukcyjne

Najłatwiejszym sposobem użycia ps jest uruchomienie go bez parametrów:

ps

ps w oknie terminala

ps wyświetla listę procesów uruchomionych przez użytkownika, który uruchomił polecenie.

wyjście z ps w oknie terminala

Cztery kolumny to:

PID: numer identyfikacyjny procesu.
TTY: nazwa konsoli, w której użytkownik jest zalogowany.
CZAS: Ilość czasu przetwarzania procesora, który proces wykorzystał.
CMD: nazwa polecenia, które uruchomiło proces

Proces wystawiania listy dla wszystkich użytkowników

dodając -e (wybierz wszystkie procesy) możemy utworzyć listę ps procesów, które zostały uruchomione przez wszystkich użytkowników, a nie tylko użytkownika, który wykonuje polecenie ps. Ponieważ to będzie długa lista, przekuwamy ją w mniej.

ps -e | less

ps -e |  mniej w oknie terminala

Lista procesów jest przesyłana potokiem do less.

Wyjście z ps -e przesłane potokiem do less w oknie terminala

Na liście mamy o wiele więcej wpisów, ale widzimy te same cztery kolumny, co poprzednio. Wpisy ze znakiem zapytania? w kolumnie TTY nie zostały uruchomione z okna terminala.

Pokazywanie hierarchii procesów

Czasami może pomóc w rozwiązaniu problemu lub zidentyfikowaniu określonego procesu, jeśli można zobaczyć, które procesy uruchomiły inne procesy. W tym celu używamy opcji -H (hierarchia).

ps -eH | less

ps -eH |  mniej w oknie terminala

Wcięcie wskazuje, które procesy są rodzicami jakich innych procesów.

wyjście z ps -eH w less w oknie terminala

Aby dodać trochę więcej jasności, możemy poprosić ps o dodanie niektórych ASCII linie i narysować hierarchię w postaci drzewa. Można to zrobić za pomocą opcji –forest.

ps -eH --forest | less

ps -eH --forest |  mniej w oknie terminala

Ułatwia to śledzenie, które procesy są rodzicami innych procesów.

wyjście ps -eH --forest przesłane potokiem do less w oknie terminala

Lista procesów według nazwy

Możesz potokować wyjście z ps do grep, aby wyświetlić wpisy które mają nazwy pasujące do wyszukiwanego hasła. Tutaj szukamy wpisów, które pasują do wyszukiwanego hasła „firefox”:

ps -e | grep firefox

ps -e |  grep firefox w oknie terminala

W tym przypadku wynik jest pojedynczym wpisem dla procesu, który nas interesuje. Oczywiście, gdybyśmy uruchomili kilka instancji Firefoksa, na liście zwróconych byłoby więcej niż jedna pozycja.

wyjście z ps -e |  grep firefox w oknie terminala

Wyświetlanie większej liczby kolumn w wyniku

Aby dodać więcej kolumn do wyniku, użyj opcji -f (pełny format).

ps -ef | less

ps -ef |  mniej w oknie terminala

Dodatkowy zestaw kolumn jest zawarty w wyjściu ps.

wyjście z ps -ef |  mniej w oknie terminala

Kolumny to:

UID: identyfikator użytkownika będący właścicielem tego procesu.
PID: identyfikator procesu procesu.
PPID: identyfikator procesu nadrzędnego procesu.
C: Liczba dzieci, które ma proces.
CZAS: Czas rozpoczęcia. Czas rozpoczęcia procesu.
TTY: nazwa konsoli, w której użytkownik jest zalogowany.
CZAS: Ilość czasu przetwarzania procesora, który proces wykorzystał.
CMD: nazwa polecenia, które uruchomiło proces.

Używając opcji -F (extra full-format) możemy uzyskać jeszcze więcej kolumn:

ps -eF | less

ps -eF |  mniej w oknie terminala

Kolumny, które otrzymujemy tym razem, wymagają przewijania ekranu w bok, aby je wszystkie ujawnić.

wyjście z ps -eF |  mniej w oknie terminala, po lewej stronie wyświetlacza

Naciśnięcie klawisza „Strzałka w prawo” przesuwa wyświetlacz w lewo.

wyjście z ps -eF |  mniej w oknie terminala, po prawej stronie wyświetlacza

Otrzymane teraz kolumny to:

UID: identyfikator użytkownika będący właścicielem tego procesu.
PID: identyfikator procesu procesu.
PPID: identyfikator procesu nadrzędnego procesu.
C: Liczba dzieci, które ma proces.
SZ: Rozmiar w stronach RAM obrazu procesu.
RSS: Rozmiar zestawu rezydenta. Jest to niewymieniona pamięć fizyczna używana przez proces.
PSR: procesor, do którego jest przypisany proces.
CZAS: Czas rozpoczęcia. Czas rozpoczęcia procesu.
TTY: nazwa konsoli, w której użytkownik jest zalogowany.
CZAS: Ilość czasu przetwarzania procesora, który proces wykorzystał.
CMD: nazwa polecenia, które uruchomiło proces.

Lista procesów według identyfikatora procesu

Po znalezieniu identyfikatora procesu, który Cię interesuje, możesz użyć go z poleceniem ps, aby wyświetlić szczegóły tego procesu. Aby to osiągnąć, użyj opcji -p (wybierz według identyfikatora procesu):

ps -p 3403

ps -p 3403 w oknie terminala

Szczegóły tego procesu są wymienione:

Wyjście ps -p 3403 w oknie terminala

Nie jesteś ograniczony do jednego identyfikatora procesu. Możesz podać listę identyfikatorów procesów oddzielonych spacjami.

Lista procesów według poleceń

Opcja -C (polecenie) umożliwia wyszukanie procesu przy użyciu nazwy polecenia. To znaczy nazwa polecenia, które uruchomiło proces. Różni się to nieco od wiersza poleceń, który może zawierać nazwy ścieżek i parametry lub opcje.

ps -C shutter

ps -C roleta w oknie terminala

Wyświetlane są szczegóły dotyczące procesu migawki.

Proces wystawiania aukcji należący do użytkownika

Aby zobaczyć procesy, których właścicielem jest określony użytkownik, użyj opcji -u (lista użytkowników):

ps -u mary

ps -u mary w oknie terminala

Wyświetlane są procesy należące do konta użytkownika mary.

Wyjście z ps -u mary w oknie terminala

Lista procesów według terminala

Aby zobaczyć procesy związane z TTY, użyj opcji -t (wybierz przez TTY). Używana bez numeru TTY, opcja -t informuje o procesach powiązanych z bieżącym oknem terminala.

tty
ps -t

ps -t w oknie terminala

Polecenie tty zgłasza, że ​​jest to pseudotype 0. Wszystkie procesy wymienione przez ps -t są powiązane z TTY pts / 0.

Jeśli przekażemy numer TTY w wierszu poleceń, powinniśmy otrzymać raport o procesach powiązanych z tym TTY.

ps -t 1

ps -t 1 ina okno terminala

Tym razem wszystkie procesy są powiązane z TTY pts / 1.

Wybieranie kolumn do wyświetlenia

Za pomocą opcji -o (format) możesz wybrać kolumny, które chcesz uwzględnić w wyniku z ps. Możesz określić kolumny według nazwy. (Długą) listę nazw kolumn można zobaczyć na strona podręcznika w sekcji zatytułowanej „Specyfikatory formatu standardowego”. W tym przykładzie wybieramy czas procesora (pcpu) i wiersz poleceń z argumentami (argumentami) zawartymi w danych wyjściowych.

ps -e -o pcpu,args | less

ps -e -o pcpu, args |  mniej w oknie terminala

Dane wyjściowe zawierają tylko nasze dwie żądane kolumny.

wyjście z ps -e -o pcpu, args |  mniej w oknie terminala

Sortowanie wyników według kolumn

Możesz posortować dane wyjściowe za pomocą opcji –sort. Posortujmy wynik według kolumny procesora:

ps -e -o pcpu,args --sort -pcpu| less

ps -e -o pcpu, args --sort -pcpu |  mniej w oknie terminala

Myślnik „-” w parametrze sortowania pcpu podaje malejącą kolejność sortowania.

Wyjście z ps posortowane według procesora w oknie terminala

Aby zobaczyć dziesięć najbardziej obciążających procesor procesów, przeprowadź wyjście przez głowicę Komenda:

ps -e -o pcpu,args --sort -pcpu | head -10

ps -e -o pcpu, args --sort -pcpu |  głowa 10 w oknie terminala

Otrzymujemy posortowaną, skróconą listę.

wyjście z ps -e -o pcpu, args --sort -pcpu |  głowa 10 w oknie terminala

Jeśli dodamy więcej kolumn do naszego wyświetlacza, możemy posortować według większej liczby kolumn. Dodajmy kolumnę pmem. To jest procent pamięci komputera używanej przez proces. Bez łącznika lub z plusem „+” porządek sortowania jest rosnący.

ps -e -o pcpu,pmem,args --sort -pcpu,pmem | head -10

ps -e -o pcpu, pmem, args --sort -pcpu, pmem |  głowa 10 w oknie terminala

Otrzymujemy naszą dodatkową kolumnę, a nowa kolumna jest uwzględniana w sortowaniu. Pierwsza kolumna jest sortowana przed drugą, a druga kolumna jest sortowana w porządku rosnącym, ponieważ nie umieściliśmy łącznika na pmem.

Wyjście z ps -e -o pcpu, pmem, args --sort -pcpu, pmem |  głowa 10 w oknie terminala

Zróbmy to trochę bardziej użytecznym i dodajmy w kolumnie ID procesu (pid), abyśmy mogli zobaczyć numer procesu każdego procesu na naszej liście.

ps -e -o pid,pcpu,pmem,args --sort -pcpu,pmem | head -10

ps -e -o pid, pcpu, pmem, args --sort -pcpu, pmem |  głowa 10 w oknie terminala

Teraz możemy zidentyfikować procesy.

Wyjście z ps -e -o pid, pcpu, pmem, args --sort -pcpu, pmem |  głowa 10

Zabijanie procesów według identyfikatora procesu

Omówiliśmy szereg sposobów identyfikowania procesów, w tym nazwę, polecenie, użytkownika i terminal. Omówiliśmy również sposoby identyfikowania procesów na podstawie ich atrybutów dynamicznych, takich jak użycie procesora i pamięć.

W ten czy inny sposób możemy zidentyfikować uruchomione procesy. Znając ich identyfikator procesu, możemy (jeśli musimy) zabić dowolny z tych procesów za pomocą polecenia kill. Gdybyśmy chcieli zabić proces 898, użylibyśmy tego formatu:

sudo kill 898

sudo kill 898 w oknie terminala

Jeśli wszystko pójdzie dobrze, proces zostanie cicho zakończony.

wyjście z sudo kill 898 w oknie terminala

Zabijanie procesów według nazwy

Polecenie pkill pozwala zabij procesy według nazwy. Upewnij się, że zidentyfikowałeś prawidłowy proces! To polecenie zakończy główny proces.

sudo pkill top

sudo pkill top w oknie terminala

Ponownie, brak wiadomości to dobra wiadomość. Proces jest cicho zakończony.

wyjście z sudo pkill top w oknie terminala

Zabijanie wielu procesów według nazwy

Jeśli masz wiele uruchomionych kopii procesu lub proces spowodował powstanie wielu procesów podrzędnych (takich jak Google Chrome), jak możesz je zabić? To równie łatwe. Używamy polecenia killall.

Mamy dwie kopie top Running:

ps -e | grep top

ps -e |  grep top w oknie terminala

Możemy wypowiedzieć obaj z tym poleceniem:

sudo killall top

sudo killall top w oknie terminala

Brak odpowiedzi oznacza brak problemów, więc oba te procesy zostały zakończone.

wyjście z sudo killall top w oknie termonalnym

Uzyskaj dynamiczny widok z górą

Wyjście z ps to widok migawki. Nie aktualizuje się. Aby uzyskać aktualizację widoku procesów, użyj górnego polecenia. Zapewnia dynamiczny widok procesów uruchomionych na Twoim komputerze. Wyświetlacz składa się z dwóch części. W górnej części ekranu znajduje się pulpit nawigacyjny składający się z wierszy tekstu oraz tabela w dolnej części ekranu złożona z kolumn.

Zacznij od góry za pomocą tego polecenia:

top

najwyższe polecenie działające w oknie terminala

Kolumny zawierają informacje o procesach:

PID: identyfikator procesu
UŻYTKOWNIK: nazwa właściciela procesu
PR: priorytet procesu
NI: Miła wartość procesu
VIRT: pamięć wirtualna używana przez proces
RES: pamięć rezydentna używana przez proces
SHR: pamięć współdzielona używana przez proces
S: Stan procesu. Zobacz poniższą listę wartości, które może przyjmować to pole
% CPU: udział czasu procesora używanego przez proces od ostatniej aktualizacji
% MEM: udział używanej pamięci fizycznej
TIME +: całkowity czas procesora używany przez zadanie w setnych częściach sekundy
COMMAND: nazwa polecenia lub linia poleceń (nazwa i parametry wiersza poleceń) Jeśli nie widać kolumny poleceń, naciśnij klawisz „Strzałka w prawo”.

Status procesu może być jednym z:

D: Nieprzerwany sen
R: Bieganie
S: Spanie
T: Śledzone (zatrzymane)
Z: Zombie

Naciśnij klawisz „Q”, aby wyjść od góry.

Zanim zabijesz proces

Upewnij się, że to ten, którego szukasz, i sprawdź, czy nie spowoduje to żadnych problemów. W szczególności warto sprawdzić opcje -H (hierarchia) i –forest, aby upewnić się, że nie ma żadnych ważnych procesów potomnych, o których zapomniałeś.