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 |
SIGTERMvsSIGKILL: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 probajSIGTERM;SIGKILLkoristi 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:
- Pokušaj
kill PID(SIGTERM) — daj procesu šansu da se lepo završi - Sačekaj nekoliko sekundi
- Ako proces i dalje živi, koristi
kill -9 PID(SIGKILL)
kill 1234
sleep 3
kill -9 1234 # Samo ako je i dalje aktivan