Gym
lesson

Šta su procesi?

Kada pokreneš program na Linuxu — bilo da je to ls, tekstualni editor ili web server — operativni sistem kreira proces. Proces je program u izvršavanju: to nije samo kod na disku, već aktivan entitet koji zauzima memoriju, koristi procesor i komunicira sa ostatkom sistema.

Analogija: Recept u kuvaru je program (mirno stoji u knjizi). Kada počneš da kuvaš po njemu — to je proces (zauzima šporet, kuhinjsko posuđe, tvoju pažnju). Iste recipe mogu istovremeno kuvati dve osobe — to su dva nezavisna procesa istog programa.

Svaki korisnik, čak i sam sistem, može imati desetine ili stotine procesa koji istovremeno rade u pozadini.

PID i PPID

Svaki proces dobija jedinstveni identifikator — PID (Process ID). To je ceo broj koji sistem dodeljuje pri kreiranju procesa.

Pored PID-a, svaki proces ima i PPID (Parent Process ID) — PID procesa koji ga je kreirao. Na taj način procesi formiraju hijerarhiju nalik stablu: svaki proces ima roditelja, a može imati i decu.

init (PID 1)
└── bash (PID 1042)
    └── ls (PID 1087)

Proces sa PID-om 1 (init ili systemd) je koreni proces — on je roditelj svih ostalih.

Stanja procesa

Proces tokom svog životnog veka može biti u različitim stanjima:

Stanje Opis
Running Proces trenutno koristi procesor ili čeka na red za procesor
Sleeping Proces čeka na neki događaj (npr. ulaz sa tastature, odgovor mreže)
Stopped Proces je pauziran, obično signalom SIGTSTP (Ctrl+Z)
Zombie Proces je završio rad, ali roditelj još nije pročitao njegov izlazni status

Zombie procesi ne zauzimaju procesor ni memoriju — samo čekaju da roditelj "preuzme" njihov status. Obično su prolazni i nestaju sami od sebe.

Komanda ps — pregled procesa

ps (process status) prikazuje spisak aktivnih procesa.

Osnovna upotreba

ps

Prikazuje samo procese u trenutnoj sesiji:

  PID TTY          TIME CMD
 1042 pts/0    00:00:00 bash
 1089 pts/0    00:00:00 ps

ps aux — svi procesi

ps aux

Prikazuje sve procese na sistemu, uključujući i one koji ne pripadaju trenutnom terminalu:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  22568  1796 ?        Ss   09:00   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S    09:00   0:00 [kthreadd]
student   1042  0.0  0.1   5984  2048 pts/0    Ss   09:10   0:00 bash
student   1089  0.0  0.0   7584  1024 pts/0    R+   09:15   0:00 ps aux

ps -ef — alternativni format

ps -ef

Sličan prikaz, ali u standardnom Unix formatu. Uvek prikazuje PPID:

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 09:00 ?        00:00:01 /sbin/init
student   1042   840  0 09:10 pts/0    00:00:00 bash
student   1089  1042  0 09:15 pts/0    00:00:00 ps -ef

Tumačenje kolona

Kolona Značenje
USER Korisnik koji je vlasnik procesa
PID Identifikator procesa
PPID Identifikator roditeljskog procesa
%CPU Procenat procesora koji proces koristi
%MEM Procenat RAM memorije koja je u upotrebi
STAT Stanje procesa (R=running, S=sleeping, T=stopped, Z=zombie)
COMMAND Naziv i argumenti programa

Komanda top — interaktivni prikaz

top je interaktivni alat koji u realnom vremenu prikazuje procese sortirane po potrošnji procesora:

top

Pritiskom na q izlaziš iz programa. Korisne prečice unutar top-a:

Taster Akcija
q Izlaz
k Ubij proces (unesi PID)
M Sortiraj po potrošnji memorije
P Sortiraj po potrošnji procesora (podrazumevano)
u Filtriraj po korisniku

Komanda htop — unapređena verzija

htop je vizuelno bogatija alternativa za top. Pruža grafičke trake za CPU i memoriju, lakšu navigaciju i direktno ubijanje procesa kursorskim tasterima.

htop

Napomena: htop možda nije instaliran po podrazumevanoj konfiguraciji. Instaliraj ga sa sudo apt install htop (Debian/Ubuntu) ili sudo dnf install htop (Fedora).

Pronalaženje konkretnog procesa

Kombinovanjem ps i grep možeš brzo naći proces po imenu:

ps aux | grep nginx     # nginx je popularan web server
root      1234  0.0  0.5  12345  5678 ?  Ss  10:00  0:01 nginx: master process
www-data  1235  0.0  0.3   9876  3210 ?  S   10:00  0:00 nginx: worker process

Savet: Poslednji red će uvek biti sam grep proces. Da ga isključiš, koristi:

ps aux | grep [n]ginx

Uglaste zagrade sprečavaju grep da pronađe sebe.