Cum să utilizați comanda ps pentru a monitoriza procesele Linux

Obțineți un instantaneu al proceselor care rulează în computerul dvs. Linux cu comanda ps. Localizați procesele după nume, utilizator sau chiar terminal cu atât de multe sau cât de puține detalii aveți nevoie. Vă arătăm cum.

Managementul proceselor pe Linux

Inima care bate a tuturor sistemelor de operare Linux și Unix este nucleul. Printre multele sale responsabilități se numără alocarea resurselor de sistem, cum ar fi RAM și timpul CPU. Acestea trebuie să fie jonglate în timp real, astfel încât toate procesele care rulează să primească partea echitabilă, în funcție de prioritatea fiecărei sarcini.

Uneori, sarcinile se pot bloca sau pot intra într-o buclă strânsă sau nu mai răspund din alte motive. Sau pot continua să ruleze, dar consumă prea mult timp CPU sau RAM, sau se comportă într-un mod la fel de antisocial. Uneori, sarcinile trebuie ucise ca o milă pentru toți cei implicați. Primul pas. Desigur, este de a identifica procesul în cauză.

Dar poate că nu aveți deloc probleme de sarcină sau de performanță. Poate că sunteți doar curios despre procesele care rulează în interiorul computerului dvs. și ați dori să aruncați o privire sub capotă. Comanda ps satisface ambele aceste nevoi. Îți oferă un instantaneu a ceea ce se întâmplă în interiorul computerului dvs „chiar acum.”

ps este suficient de flexibil pentru a vă oferi exact informațiile de care aveți nevoie, exact în formatul dorit. De fapt, ps are o mulțime de opțiuni. Opțiunile descrise aici vor satisface cele mai obișnuite nevoi. Dacă trebuie să aprofundați în ps decât am analizat-o în acest articol, veți descoperi că introducerea noastră face pagina de manual mai ușor de digerat.

Procese de listare

Cel mai simplu mod de a folosi ps este să-l pornești fără parametri:

ps

ps afișează o listă a proceselor începute de utilizatorul care a executat comanda.

Cele patru coloane sunt:

PID: numărul de identificare al procesului.
TTY: Numele consolei la care utilizatorul este conectat.
TIME: cantitatea de timp de procesare CPU pe care procesul a folosit-o.
CMD: Numele comenzii care a lansat procesul

Procesul de listare pentru toți utilizatorii

prin adăugarea -e (selectați toate procesele) putem face ps să listeze procesele care au fost pornite de toți utilizatorii, nu doar de utilizatorul care execută comanda ps. Pentru că aceasta va fi o listă lungă, o distribuim în mai puține.

ps -e | less

Lista de procese este canalizată în mai puțin.

  Cum să joci Sniper Elite pe Linux

Avem mai multe intrări în listă, dar vedem aceleași patru coloane ca înainte. Intrările cu semn de întrebare? din coloana TTY nu au fost pornite dintr-o fereastră de terminal.

Afișarea ierarhiei proceselor

Uneori, vă poate ajuta să descoperiți o problemă sau să identificați un anumit proces dacă puteți vedea care procese au lansat alte procese. Folosim opțiunea -H (ierarhie) pentru a face acest lucru.

ps -eH | less

Indentarea indică care procese sunt părinți ai căror alte procese.

Pentru a adăuga puțin mai multă claritate, putem cere ps să adauge câteva ASCII linii și să deseneze ierarhia ca un arbore. Opțiunea de a face acest lucru este opțiunea –forest.

ps -eH --forest | less

Acest lucru face mai ușor să urmăriți care procese sunt părinții altor procese.

Listarea proceselor după nume

Puteți canaliza ieșirea de la ps prin grep la intrările din listă care au nume care corespund termenului de căutare. Aici căutăm intrări care se potrivesc cu termenul de căutare „firefox”:

ps -e | grep firefox

În acest caz, rezultatul este o singură intrare pentru procesul care ne interesează. Desigur, dacă am fi lansat mai multe instanțe de Firefox, ar fi mai mult de un element returnat în listă.

Se afișează mai multe coloane în rezultat

Pentru a adăuga mai multe coloane la rezultat, utilizați opțiunea -f (format complet).

ps -ef | less

Un set suplimentar de coloane este inclus în rezultatul de la ps.

Coloanele sunt:

UID: ID-ul utilizatorului proprietarului acestui proces.
PID: ID-ul procesului.
PPID: ID-ul procesului părinte al procesului.
C: Numărul de copii pe care le are procesul.
STIME: Ora de începere. Ora la care a început procesul.
TTY: Numele consolei la care utilizatorul este conectat.
TIME: cantitatea de timp de procesare CPU pe care procesul a folosit-o.
CMD: Numele comenzii care a lansat procesul.

Folosind opțiunea -F (format complet suplimentar) putem obține și mai multe coloane:

ps -eF | less

Coloanele pe care le primim de data aceasta necesită ca ecranul să fie derulat în lateral pentru a le dezvălui pe toate.

Apăsarea tastei „Săgeată dreapta” mută afișajul la stânga.

Coloanele pe care le primim acum sunt:

UID: ID-ul utilizatorului proprietarului acestui proces.
PID: ID-ul procesului.
PPID: ID-ul procesului părinte al procesului.
C: Numărul de copii pe care le are procesul.
SZ: Dimensiunea în paginile RAM ale imaginii de proces.
RSS: Mărimea setului rezidenților. Aceasta este memoria fizică neschimbată utilizată de proces.
PSR: Procesorul căruia îi este alocat procesul.
STIME: Ora de începere. Ora la care a început procesul.
TTY: Numele consolei la care utilizatorul este conectat.
TIME: cantitatea de timp de procesare CPU pe care procesul a folosit-o.
CMD: Numele comenzii care a lansat procesul.

  Cele mai bune 5 sisteme de operare Linux pentru jocurile Raspberry Pi

Listarea proceselor după ID-ul procesului

Odată ce ați găsit ID-ul procesului pentru procesul care vă interesează, îl puteți utiliza cu comanda ps pentru a enumera detaliile procesului respectiv. Utilizați opțiunea -p (selectați după ID proces) pentru a realiza acest lucru:

ps -p 3403

Detaliile pentru acest proces sunt enumerate:

Nu sunteți restricționat la un singur ID de proces. Puteți furniza o listă de ID-uri de proces, separate prin spații.

Listarea proceselor prin comandă

Opțiunea -C (comandă) vă permite să căutați un proces folosind numele comenzii. Adică numele comenzii care a lansat procesul. Aceasta este subtil diferită de linia de comandă, care poate include nume de căi și parametri sau opțiuni.

ps -C shutter

Sunt enumerate detaliile pentru procesul de declanșare.

Listarea proceselor deținute de un utilizator

Pentru a vedea procesele care sunt deținute de un anumit utilizator, utilizați opțiunea -u (lista de utilizatori):

ps -u mary

Sunt afișate procesele deținute de contul de utilizator Mary.

Listarea proceselor după terminal

Pentru a vedea procesele asociate cu un TTY, utilizați opțiunea -t (selectare prin TTY). Folosită fără un număr TTY, opțiunea -t raportează procesele asociate cu fereastra terminalului curent.

tty
ps -t

Comanda tty raportează că acesta este pseudo-teletip 0. Procesele enumerate de ps -t sunt toate asociate cu TTY pts/0.

Dacă transmitem un număr TTY pe linia de comandă, ar trebui să obținem un raport al proceselor asociate cu acel TTY.

ps -t 1

De data aceasta, toate procesele sunt asociate cu TTY pts/1.

Selectarea coloanelor de afișat

Cu opțiunea -o (format) puteți selecta ce coloane doriți să includeți în rezultatul de la ps. Specificați coloanele după nume. Lista (lungă) de nume de coloane poate fi văzută pe pagina de manual în secțiunea intitulată „Specificatori de format standard”. În acest exemplu, alegem să avem timpul CPU (pcpu) și linia de comandă cu argumente (args) incluse în rezultat.

ps -e -o pcpu,args | less

Ieșirea include doar cele două coloane solicitate.

Sortarea ieșirii după coloane

Puteți avea rezultatul sortat pentru dvs. utilizând opțiunea –sort. Să sortăm rezultatul după coloana CPU:

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

Cratima „-” de pe parametrul de sortare pcpu oferă o ordine de sortare descrescătoare.

Pentru a vedea cele zece procese care consumă cel mai mult CPU, treceți prin cap comanda:

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

Primim o listă sortată, trunchiată.

Dacă adăugăm mai multe coloane pe afișajul nostru, putem sorta după mai multe coloane. Să adăugăm coloana pmem. Acesta este procentul din memoria computerului care este utilizat de proces. Fără cratimă sau cu un plus „+“, ordinea de sortare este crescătoare.

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

Primim coloana noastră suplimentară, iar noua coloană este inclusă în sortare. Prima coloană este sortată înainte de a doua coloană, iar a doua coloană este sortată în ordine crescătoare pentru că nu am pus o cratimă pe pmem.

  Cum să joci Dungeon Defenders pe Linux

Să-l facem puțin mai util și să adăugăm în coloana ID proces (pid), astfel încât să putem vedea numărul de proces al fiecărui proces din lista noastră.

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

Acum putem identifica procesele.

Uciderea proceselor prin ID-ul procesului

Am acoperit o serie de moduri de a identifica procesele, inclusiv numele, comanda, utilizatorul și terminalul. Am abordat, de asemenea, modalități de identificare a proceselor după atributele lor dinamice, cum ar fi utilizarea CPU și memoria.

Deci, într-un fel sau altul, putem identifica procesele care rulează. Cunoscând ID-ul procesului lor, putem (dacă avem nevoie) să omorâm oricare dintre aceste procese folosind comanda kill. Dacă am dori să omorâm procesul 898, am folosi acest format:

sudo kill 898

Dacă totul merge bine, procesul se încheie în tăcere.

Uciderea proceselor după nume

Comanda pkill vă permite ucide procesele pe nume. Asigurați-vă că ați identificat procesul corect! Această comandă va încheia procesul de sus.

sudo pkill top

Din nou, nicio veste nu este o veste bună. Procesul este încheiat în tăcere.

Uciderea mai multor procese după nume

Dacă aveți mai multe copii ale unui proces care rulează sau un proces a generat un număr de procese secundare (cum ar fi Google Chrome), cum le puteți elimina? E la fel de ușor. Folosim comanda killall.

Avem două exemplare din top rulare:

ps -e | grep top

Putem rezilia amândoi cu această comandă:

sudo killall top

Niciun răspuns înseamnă că nu există probleme, așa că ambele procese au fost încheiate.

Obțineți o vizualizare dinamică cu partea de sus

Ieșirea de la ps este o vizualizare instantanee. Nu se actualizează. Pentru a obține o vizualizare de actualizare a proceselor, utilizați comanda de sus. Acesta oferă o vizualizare dinamică a proceselor care rulează în computerul dvs. Display-ul este în două părți. Există o zonă de tablou de bord în partea de sus a ecranului alcătuită din linii de text, iar în partea inferioară a ecranului un tabel format din coloane.

Începeți de sus cu această comandă:

top

Coloanele conțin informații despre procese:

PID: ID proces
UTILIZATOR: Numele proprietarului procesului
PR: Prioritatea procesului
NI: Valoarea plăcută a procesului
VIRT: Memoria virtuală utilizată de proces
RES: Memoria rezidentă utilizată de proces
SHR: memorie partajată utilizată de proces
S: Starea procesului. Consultați lista de mai jos cu valorile pe care le poate lua acest câmp
%CPU: ponderea timpului CPU utilizată de proces de la ultima actualizare
%MEM: cota de memorie fizică utilizată
TIME+: timpul total al procesorului utilizat de sarcină în sutimi de secundă
COMANDĂ: numele comenzii sau linia de comandă (nume și parametrii liniei de comandă) Dacă coloana de comandă nu poate fi văzută, apăsați tasta „Săgeată dreapta”.

Starea procesului poate fi una dintre:

D: Somn neîntrerupt
R: Alergând
S: Dormit
T: urmărit (oprit)
Z: Zombie

Apăsați tasta „Q” pentru a ieși din partea de sus.

Înainte de a ucide un proces

Asigurați-vă că este cel pe care îl căutați și verificați dacă nu vă va cauza probleme. În special, merită să verificați cu opțiunile -H (ierarhie) și –forest pentru a vă asigura că nu are procese secundare importante despre care ați uitat.