Како убити процесе са Линук терминала

Ponekad je prekidanje procesa jedini način da se rešite problema. Iako zvuči drastično, „ubijanje“ procesa zapravo znači prisilno prekidanje njegovog rada. Evo kako to možete učiniti pomoću komandne linije na Linux ili macOS sistemima.

Šta je zapravo proces?

Procesi su pokrenuti programi. To mogu biti, na primer, vaš internet pretraživač, pozadinski procesi vezani za vaše okruženje ili Linux sistemske usluge.

Procese možemo podeliti u dve osnovne kategorije:

Procesi u prvom planu su oni koje je pokrenuo korisnik, bilo kroz terminal ili kao grafičku aplikaciju. Oni su interaktivni i zahtevaju ili prikazuju korisnički unos. S druge strane, pozadinski procesi se pokreću automatski i ne zahtevaju interakciju s korisnikom. Oni obavljaju zadatke u pozadini, poput usluga i demona.

Ako zamislimo procese kao pozorišnu predstavu, procesi u prvom planu su glumci i osoblje na sceni, dok su pozadinski procesi tehnička ekipa iza zavese.

Kada se procesi loše ponašaju ili ne rade kako treba, mogu prekomerno koristiti CPU, RAM memoriju, ili zapasti u beskonačnu petlju, čime prestaju da reaguju. Grafičke aplikacije mogu prestati da reaguju na klikove mišem, a terminalne aplikacije mogu „zamrznuti“ i ne vratiti vas u komandnu liniju.

Humano rešenje

„Ubijanje“ procesa je, dakle, zapravo prisilno zaustavljanje procesa. To je neophodno kada proces postane neodgovoran.

Linux pruža komande kill, pkill i killall koje vam omogućavaju upravo to. Ove komande mogu se koristiti za prekidanje bilo koje vrste procesa, bilo da se radi o grafičkoj aplikaciji, terminalnom procesu, procesu u prvom planu ili u pozadini.

Komanda `kill`

Da biste koristili komandu kill, morate znati ID procesa (PID) koji želite da prekinete. PID možete pronaći pomoću komande ps.

Da biste pretražili sve procese, koristite opciju -e (svi procesi). Preporučuje se da izlaz komande ps prosledite kroz less, jer će ga biti mnogo. Upišite ps -e | less i pritisnite Enter da biste izvršili komandu.

ps -e | less

Prikazaće se lista procesa slična onoj na slici ispod. Možete pretraživati unazad ili unapred kroz less pomoću tastera / i ?.

Ako vas zanima određeni proces, prosledite izlaz komande ps kroz grep i navedite ime ili deo imena procesa.

ps -e | grep shutter

Kada pronađete PID procesa koji želite da prekinete, prosledite ga komandi kill kao parametar. Da biste prekinuli proces „shutter“ (čiji je PID u ovom primeru 2099), upotrebite ovu komandu:

kill 2099

Komanda kill je „tihi ubica“—ne daje nikakvu povratnu informaciju ako je uspešno izvršena.

Komanda `pkill`

Komanda pkill omogućava prekidanje procesa po imenu. Ne morate da znate PID procesa. Dovoljno je navesti termin za pretragu po kojem će komanda pkill proveriti listu pokrenutih procesa i prekinuti one koji se podudaraju. Zbog toga je bitno da budete sigurni da je termin za pretragu tačan.

Radi dodatne sigurnosti, pre upotrebe komande pkill možete koristiti komandu pgrep. Komanda pgrep takođe prihvata termin za pretragu i ispisuje PID svakog procesa koji se podudara sa terminom. Ovo je bezbedno jer pgrep ne šalje nikakav signal za prekid procesima. Tako, ako pogrešno unesete termin za pretragu, nećete slučajno ubiti neki drugi proces. Možete se uveriti da je termin za pretragu ispravan pre nego što ga prosledite komandi pkill. Komande pkill i pgrep tretiraju termin za pretragu na isti način. Njihova sličnost je tolika da dele istu „man“ stranicu.

Pretpostavimo da postoji proces čije ime sadrži „subq“. Koristićemo ps -u dave | grep subq komandu da proverimo njegovo puno ime, što se može videti na sledećem primeru.

ps -u dave | grep subq

Pretpostavimo da naš korisnik ne zna puno ime procesa, već samo da njegovo ime sadrži „subq“. On koristi pgrep da proveri da li postoji samo jedno podudaranje sa terminom pretrage, a zatim koristi taj termin sa pkill.

pgrep subq
pkill subq

Možete koristiti pkill da ubijete više procesa odjednom. Na ovom primeru korisnik koristi pgrep da proveri koliko je procesa Chrome-a pokrenuto, zatim ih sve ubija pomoću pkill, a na kraju ponovo koristi pgrep da proveri da li su svi procesi uklonjeni.

pgrep chrome
pkill chrome
pgrep chrome

Ako se pokrene više procesa sa istim imenom, ali ne želite da ih sve prekinete, možete koristiti pgrep sa opcijom -f (komandna linija) da identifikujete koji proces je koji. Jednostavan primer bi bila dva ping procesa. Želite da prekinete jedan od njih, ali ne i drugi. Možete koristiti njihove komandne linije da biste ih razlikovali. Obratite pažnju na upotrebu navodnika za parametar komandne linije.

pgrep -f "ping 192.168.4.22"
pkill -f "ping 192.168.4.22"

Komanda `killall`

Upozorenje: Na operativnim sistemima Solaris i OpenIndiana, komanda killall će ubiti sve procese koji pripadaju vama. Ako ste „root“ korisnik ili koristite sudo killall, restartovaćete računar! Ovo ponašanje je potvrđeno testiranjem na najnovijoj verziji OpenIndiana Hipster 2018.10.

Komanda killall radi slično kao i komanda pkill, ali sa jednom specifičnom razlikom: umesto da prosleđujete termin za pretragu, morate navesti tačno ime procesa.

Ne možete navesti delimično podudaranje sa imenom procesa; morate navesti celo ime procesa, kao što je prikazano:

killall shutt
killall shutter

Opcija -y (mlađe od) vam omogućava da ubijete procese koji su bili pokrenuti kraće od određenog perioda. Period se zadaje u brojevima iza kojih sledi jedna od sledećih jedinica:

s (sekunde)
m (minuti)
h (sati)
d (dana)
w (nedelje)
M (meseci – velika „M“)
y (godine)

Da biste ubili proces koji se zove „ana“ a koji je tek pokrenut, ostavljajući sve starije instance „ana“ netaknute, možete koristiti sledeće parametre sa killall, ako reagujete u roku od dva minuta:

killall -y 2m ana

Opcija -o (starije od) vam omogućava da ubijete procese koji su bili pokrenuti duže od određenog perioda. Ova komanda će prekinuti sve SSH konekcije koje su pokrenute duže od jednog dana:

killall -o 1d sshd

Budite oprezni sa okidačem

Ove komande vam omogućavaju da precizno i sigurno identifikujete i prekinete procese koji ne rade kako treba.

Uvek budite oprezni. Prvo se uverite da je proces koji nameravate da ubijete zaista onaj koji želite. Drugo, proverite dvaput – budite pažljivi i uverite se da je ciljani proces onaj koji želite da prekinete. Nastavite sa prekidom procesa tek kada ste sigurni.