Како користити команду пс за надгледање Линук процеса

Snimite trenutne procese koji se odvijaju na vašem Linux sistemu koristeći komandu `ps`. Pronađite određene procese po imenu, korisniku ili čak terminalu, uz detalje koji su vam potrebni. Pokazaćemo vam kako.

Upravljanje procesima na Linuxu

Jezgro je srž svakog Linux i Unix operativnog sistema. Jedna od njegovih mnogobrojnih odgovornosti je alokacija sistemskih resursa poput RAM-a i CPU vremena. Sve ovo se mora koordinirati u realnom vremenu kako bi svi aktivni procesi dobili svoj deo, u skladu sa prioritetom svakog zadatka.

Ponekad se zadaci mogu „zaglaviti“, ući u beskonačnu petlju ili prestati da reaguju iz raznih razloga. Takođe, mogu nastaviti da rade, ali troše previše CPU vremena ili RAM-a, ili se ponašaju na neki drugi nepoželjan način. U određenim situacijama, zadatke je neophodno „ubiti“, radi opšte dobrobiti sistema. Prvi korak je, naravno, identifikovanje procesa koji pravi problem.

Ali, možda nemate nikakvih problema sa zadacima ili performansama. Možda vas jednostavno zanima koji se procesi trenutno odvijaju na vašem računaru i želite da „zavirite ispod haube“. Komanda `ps` ispunjava oba ova zahteva. Ona vam pruža „trenutni“ uvid u to šta se dešava unutar vašeg računara.

`ps` je veoma prilagodljiva komanda koja vam omogućava da dobijete precizne informacije koje su vam potrebne, u formatu koji želite. U stvari, `ps` ima veliki broj opcija. Ovde opisane opcije će zadovoljiti većinu standardnih potreba. Ukoliko želite detaljnije da istražite mogućnosti `ps` komande, ovaj uvod će vam olakšati razumevanje `man` stranice.

Prikaz liste procesa

Najjednostavniji način da koristite `ps` je da je pokrenete bez ikakvih parametara:

ps

`ps` prikazuje listu procesa koje je pokrenuo korisnik koji je izvršio komandu.

Prikazane su četiri kolone:

PID: Jedinstveni identifikacioni broj procesa.
TTY: Naziv terminala na kom je korisnik prijavljen.
TIME: Ukupno vreme procesora koje je proces koristio.
CMD: Naziv komande koja je pokrenula proces.

Prikaz procesa za sve korisnike

Dodavanjem opcije `-e` (izaberi sve procese), možemo naterati `ps` da prikaže procese koje su pokrenuli svi korisnici, a ne samo korisnik koji je pokrenuo komandu `ps`. S obzirom da će ovo biti dugačka lista, preusmeravamo je na `less` komandu.

ps -e | less

Lista procesa je preusmerena na `less`.

Imamo mnogo više unosa na listi, ali prikazane su iste četiri kolone kao i ranije. Unosi sa znakom pitanja `?` u TTY koloni nisu pokrenuti iz terminala.

Prikaz hijerarhije procesa

Ponekad može biti korisno otkriti problem ili identifikovati određeni proces ako možete videti koji procesi su pokrenuli druge procese. Za to koristimo opciju `-H` (hijerarhija).

ps -eH | less

Uvlačenje označava koji procesi su „roditelji“ kojim drugim procesima.

Da bismo dodatno poboljšali preglednost, možemo zatražiti od `ps` da doda ASCII linije i da prikaže hijerarhiju kao stablo. Opcija za to je `–forest`.

ps -eH --forest | less

Ovo olakšava praćenje koji procesi su „roditelji“ drugih procesa.

Prikaz procesa po imenu

Možete proslediti izlaz komande `ps` kroz `grep` kako biste pronašli unose na listi koji imaju imena koja odgovaraju terminu za pretragu. U ovom slučaju, tražimo unose koji odgovaraju terminu za pretragu „firefox“:

ps -e | grep firefox

U ovom slučaju, izlaz je jedan unos za proces koji nas zanima. Naravno, da smo pokrenuli više instanci Firefox-a, na listi bi bilo vraćeno više od jednog unosa.

Prikaz više kolona u izlazu

Da biste dodali više kolona u izlaz, koristite opciju `-f` (puni format).

ps -ef | less

Dodatni skup kolona je uključen u izlaz komande `ps`.

Kolone su:

UID: Korisnički ID vlasnika ovog procesa.
PID: Identifikacioni broj procesa.
PPID: Identifikacioni broj „roditeljskog“ procesa.
C: Broj „dece“ koju proces ima.
STIME: Vreme pokretanja. Vreme kada je proces započeo.
TTY: Naziv terminala na kom je korisnik prijavljen.
TIME: Ukupno vreme procesora koje je proces koristio.
CMD: Naziv komande koja je pokrenula proces.

Korišćenjem opcije `-F` (ekstra puni format) možemo dobiti još više kolona:

ps -eF | less

Kolone koje dobijamo ovog puta zahtevaju da se ekran pomera u stranu da bi se sve otkrile.

Pritiskom na taster „strelica udesno“, ekran se pomera ulevo.

Kolone koje sada dobijamo su:

UID: Korisnički ID vlasnika ovog procesa.
PID: Identifikacioni broj procesa.
PPID: Identifikacioni broj „roditeljskog“ procesa.
C: Broj „dece“ koju proces ima.
SZ: Veličina slike procesa u RAM stranicama.
RSS: Stalna veličina seta. Ovo je nezamenjiva fizička memorija koju koristi proces.
PSR: Procesor kome je proces dodeljen.
STIME: Vreme pokretanja. Vreme kada je proces započeo.
TTY: Naziv terminala na kom je korisnik prijavljen.
TIME: Ukupno vreme procesora koje je proces koristio.
CMD: Naziv komande koja je pokrenula proces.

Prikaz procesa prema PID-u

Kada pronađete identifikacioni broj procesa (PID) za proces koji vas zanima, možete ga koristiti sa komandom `ps` kako biste prikazali detalje tog procesa. Koristite opciju `-p` (izaberi prema PID-u) da biste to postigli:

ps -p 3403

Prikazani su detalji za ovaj proces:

Niste ograničeni na jedan PID. Možete navesti listu PID-ova, razdvojene razmacima.

Prikaz procesa po komandi

Opcija `-C` (komanda) vam omogućava da tražite proces koristeći ime komande. To jest, naziv komande koja je pokrenula proces. Ovo se razlikuje od komandne linije, koja može uključivati nazive putanja i parametre ili opcije.

ps -C shutter

Prikazani su detalji za proces „shutter“.

Prikaz procesa u vlasništvu korisnika

Da biste videli procese koji su u vlasništvu određenog korisnika, koristite opciju `-u` (lista korisnika):

ps -u mary

Prikazani su procesi u vlasništvu korisničkog naloga „mary“.

Prikaz procesa po terminalu

Da biste videli procese povezane sa TTY-jem, koristite opciju `-t` (izaberi TTY). Ako se koristi bez TTY broja, opcija `-t` prikazuje procese povezane sa trenutnim terminalom.

tty
ps -t

Komanda `tty` prikazuje da je ovo pseudo-teletip 0. Svi procesi navedeni sa `ps -t` su povezani sa TTY `pts/0`.

Ako prosledimo TTY broj na komandnoj liniji, trebalo bi da dobijemo izveštaj o procesima povezanim sa tim TTY-jem.

ps -t 1

Ovog puta, svi procesi su povezani sa TTY `pts/1`.

Odabir kolona za prikaz

Sa opcijom `-o` (format) možete odabrati koje kolone želite da uključite u izlaz komande `ps`. Kolone navodite po imenu. Lista naziva kolona se može videti na `man` stranici u odeljku pod nazivom „Standardni specifikatori formata“. U ovom primeru, odabiramo da CPU vreme (pcpu) i komandna linija sa argumentima (args) budu uključeni u izlaz.

ps -e -o pcpu,args | less

Izlaz uključuje samo naše dve tražene kolone.

Sortiranje izlaza po kolonama

Možete sortirati izlaz komande `ps` pomoću opcije `–sort`. Sortirajmo izlaz prema CPU koloni:

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

Crtica `-` na `pcpu` parametru sortiranja označava opadajući redosled sortiranja.

Da biste videli deset CPU najintenzivnijih procesa, prosledite izlaz kroz `head` komandu:

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

Dobijamo sortiranu, skraćenu listu.

Ako dodamo više kolona našem prikazu, možemo sortirati po više kolona. Dodajmo `pmem` kolonu. Ovo je procenat memorije računara koji se koristi u procesu. Bez crtice ili sa znakom plus „+“, redosled sortiranja je rastući.

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

Dobijamo našu dodatnu kolonu, a nova kolona je uključena u sortiranje. Prva kolona je sortirana pre druge kolone, a druga kolona je sortirana uzlaznim redosledom jer nismo stavili crticu na `pmem`.

Učinimo ga malo korisnijim i dodajmo kolonu PID (identifikacioni broj procesa) tako da možemo videti broj procesa svakog procesa u našoj listi.

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

Sada možemo da identifikujemo procese.

Ubijanje procesa prema PID-u

Pokrili smo razne načine za identifikaciju procesa, uključujući ime, komandu, korisnika i terminal. Takođe smo pokrili načine za identifikaciju procesa po njihovim dinamičkim atributima, kao što su upotreba CPU-a i memorije.

Dakle, na ovaj ili onaj način, možemo identifikovati procese koji se pokreću. Znajući njihov PID, možemo (ako je potrebno) da ubijemo bilo koji od tih procesa koristeći komandu `kill`. Ako želimo da ubijemo proces sa PID-om 898, koristili bismo sledeći format:

sudo kill 898

Ako sve prođe kako treba, proces se tiho prekida.

Ubijanje procesa po imenu

Komanda `pkill` vam omogućava da ubijete procese po imenu. Budite sigurni da ste identifikovali tačan proces! Ova komanda će prekinuti proces „top“.

sudo pkill top

Opet, „nikakva vest nije dobra vest“. Proces se tiho prekida.

Ubijanje više procesa po imenu

Ako imate pokrenuto više kopija procesa ili je proces pokrenuo niz podređenih procesa (kao što to može da uradi Google Chrome), kako možete da ih ubijete? To je isto tako lako. Koristimo komandu `killall`.

Imamo dve kopije procesa „top“:

ps -e | grep top

Možemo prekinuti oba procesa ovom komandom:

sudo killall top

Nema odgovora znači da nema problema, tako da su oba procesa prekinuta.

Dobijte dinamički prikaz sa komandom `top`

Izlaz iz komande `ps` je prikaz snimka. Ne ažurira se. Da biste dobili ažurirani prikaz procesa, koristite komandu `top`. Ona pruža dinamički prikaz procesa koji se pokreću na vašem računaru. Prikaz je iz dva dela. Na vrhu ekrana se nalazi kontrolna tabla sastavljena od redova teksta, a tabela u donjem delu ekrana sastavljena je od kolona.

Pokrenite `top` sa ovom komandom:

top

Kolone sadrže informacije o procesima:

PID: Identifikacioni broj procesa.
USER: Ime vlasnika procesa.
PR: Prioritet procesa.
NI: „Lepa vrednost“ procesa.
VIRT: Virtuelna memorija koju koristi proces.
RES: Stalna memorija koju koristi proces.
SHR: Zajednička memorija koju koristi proces.
S: Status procesa. Pogledajte donju listu vrednosti koje ovo polje može da ima.
%CPU: Udeo CPU vremena koje proces koristi od poslednjeg ažuriranja.
%MEM: Udeo korišćene fizičke memorije.
TIME+: Ukupno CPU vreme koje zadatak koristi u stotim delovima sekunde.
COMMAND: Ime komande ili komandna linija (naziv i parametri komandne linije). Ako se kolona „command“ ne vidi, pritisnite taster „strelica udesno“.

Status procesa može biti jedan od sledećih:

D: Neprekidan san.
R: Pokrenut.
S: Spavanje.
T: Praćen (zaustavljen).
Z: Zombi.

Pritisnite taster „Q“ da izađete iz komande `top`.

Pre nego što „ubijete“ proces

Uverite se da je to proces koji tražite i proverite da li vam neće praviti probleme. Konkretno, vredi proveriti sa opcijama `-H` (hijerarhija) i `–forest` kako biste bili sigurni da nema važnih podređenih procesa na koje ste zaboravili.