Gym
lesson

Upravljanje procesima

Linux ti omogućava da komuniciraš sa procesima slanjem signala.

Signal je kratka poruka koju jedan proces šalje drugom — najčešće "molim te ugasi se". Sistem koristi signale stalno: kad pritisneš Ctrl+C, terminal šalje signal SIGINT procesu da prestane.

Signal govori procesu šta treba da uradi — da se zaustavi, ponovo učita konfiguraciju, ili da se odmah ugasi bez čišćenja.

Signali

Signali su standardizovani u Linuxu. Svaki ima ime i broj. Najvažniji su:

Signal Broj Opis
SIGHUP 1 Hang up — obično znači: ponovo učitaj konfiguraciju
SIGINT 2 Interrupt — isto što i Ctrl+C
SIGTERM 15 Terminate — ljubazan zahtev za gašenje (podrazumevani)
SIGKILL 9 Kill — prisilno i trenutno gašenje, ne može biti ignorisano
SIGTSTP 20 Stop — pauzira proces (isto što i Ctrl+Z)
SIGCONT 18 Continue — nastavlja pauziran proces

SIGTERM vs SIGKILL: SIGTERM (15) daje procesu priliku da sačuva fajlove, zatvori mrežne konekcije i oslobodi resurse pre nego što izađe. SIGKILL (9) ga zaustavlja istog časa — nedovršeni upisi se gube, privremeni fajlovi ostaju. Uvek prvo probaj SIGTERM; SIGKILL koristi tek ako proces ne reaguje.

Komanda kill

Uprkos imenu, kill šalje signal procesu — ne mora nužno da ga ubije. Podrazumevano šalje SIGTERM (15).

Osnovna upotreba

kill PID

Šalje SIGTERM procesu sa datim PID-om:

kill 1042

Slanje konkretnog signala

kill -SIGNAL PID
kill -9 1042      # SIGKILL — prisilno gašenje
kill -15 1042     # SIGTERM — isto kao kill 1042
kill -1 1042      # SIGHUP — ponovo učitaj konfiguraciju

Možeš koristiti i ime signala umesto broja:

kill -SIGKILL 1042
kill -SIGTERM 1042

Primer: gašenje procesa

Pronađi PID procesa, zatim ga ugasi:

ps aux | grep firefox
# student  2345  15.2  8.1 ... firefox
kill 2345

Ako proces ne reaguje na SIGTERM, koristi SIGKILL:

kill -9 2345

Komanda killall

killall šalje signal svim procesima sa datim imenom, bez potrebe da znaš PID:

killall ime_programa
killall firefox         # Ugasi sve firefox procese
killall -9 firefox      # Prisilno ugasi sve firefox procese

Oprez: killall će ubiti sve procese tog imena, uključujući i one koje si možda nenamerno pokrenuo.

Komanda pkill

pkill je naprednija verzija koja traži procese po uzorku (pattern), a ne tačnom imenu:

pkill uzorak
pkill fire       # Ubija sve procese čije ime sadrži "fire"
pkill -9 chrome  # Prisilno ubija chrome procese

pkill koristi regularne izraze, što ga čini fleksibilnijim od killall.

Komanda pgrep

pgrep pronalazi PID-ove procesa po imenu ili uzorku, bez ubijanja:

pgrep ime_programa
pgrep bash        # Ispisuje PID-ove svih bash procesa
pgrep -l bash     # Ispisuje PID i ime procesa
pgrep -u student  # Ispisuje sve procese korisnika student

Koristan je kada hoćeš najpre da proveriš koji procesi odgovaraju uzorku pre nego što ih ubiješ.

Tastaturne prečice

Dok je program aktivan u terminalu, možeš koristiti prečice za slanje signala:

Prečica Signal Efekat
Ctrl+C SIGINT (2) Prekida program (ljubazno)
Ctrl+Z SIGTSTP (20) Pauzira program, vraća te u shell
Ctrl+\ SIGQUIT (3) Prekida i kreira core dump (snimak memorije procesa pri padu, za debug)

Redosled gašenja procesa

Preporučeni redosled kada hoćeš da ugasiš proces koji ne reaguje:

  1. Pokušaj kill PID (SIGTERM) — daj procesu šansu da se lepo završi
  2. Sačekaj nekoliko sekundi
  3. Ako proces i dalje živi, koristi kill -9 PID (SIGKILL)
kill 1234
sleep 3
kill -9 1234   # Samo ako je i dalje aktivan