Cum să omorâți procesele din terminalul Linux

Uciderea unui proces este uneori singura modalitate de a scăpa de el. În ciuda numelui dur, „uciderea” unui proces înseamnă doar „forțarea acestuia să renunțe”. Iată cum să o faci din linia de comandă Linux sau macOS.

Ce este un proces?

Rularea de programe precum browserul dvs. web, procesele de fundal asociate cu mediul dvs. desktop și serviciile de sistem Linux sunt toate procese.

Puteți grupa procesele în două grupuri:

Procesele din prim-plan sunt cele care au fost pornite sau lansate de un utilizator. Acestea pot fi într-o fereastră de terminal sau pot fi o aplicație grafică.
Procesele de fundal sunt toate procesele care sunt pornite automat și nu au nicio interacțiune cu utilizatorii. Ei nu așteaptă informații de la utilizatori și nici nu le prezintă rezultate sau rezultate. Procesele de fundal sunt lucruri precum serviciile și demonii.

Dacă procesele din prim-plan sunt partea din față a personalului teatrului și a actorilor, procesele de fundal sunt echipa din culise „din culise”.

Atunci când procesele se comportă defectuos sau funcționează defectuos, pot acumula prea mult timp CPU, vă pot consuma memoria RAM sau pot intra într-o buclă de calcul strânsă și pot deveni fără răspuns. Aplicațiile grafice pot refuza să răspundă la clicurile mouse-ului. Aplicațiile terminale ar putea să nu vă returneze niciodată la promptul de comandă.

Răspunsul uman

„Uciderea” unui proces înseamnă doar „forțarea procesului să renunțe”. Acest lucru poate fi necesar dacă procesul refuză să răspundă.

Linux oferă comenzile kill, pkill și killall pentru a vă permite să faceți exact asta. Aceste comenzi pot fi folosite cu orice tip de proces, grafic sau linie de comandă, prim-plan sau fundal.

  Cum se instalează fișiere Deb pe Ubuntu Linux (patru metode)

Comanda ucidere

Pentru a utiliza kill, trebuie să cunoașteți ID-ul procesului (PID) al procesului pe care doriți să-l încheiați. Comanda ps poate fi folosită pentru a găsi PID-ul unui proces.

Pentru ca ps să caute prin toate procesele, utilizați opțiunea -e (toate procesele). Este recomandabil să treceți mai puțin de ieșire, va fi destul de mult. Tastați ps, un spațiu, -e, un spațiu, | (un caracter pipe), un alt spațiu și apoi tastați mai puțin. Apăsați Enter pentru a executa comanda.

ps -e | less

Acest lucru vă va oferi o listă de proces care arată similar cu captura de ecran de mai jos. Puteți căuta înainte în mai puțin folosind tasta / și puteți căuta înapoi folosind ? cheie.

Pentru a aborda procesul de care sunteți interesat, transmiteți ieșirea de la ps prin grep și specificați numele — sau o parte a numelui — procesului.

ps -e | grep shutter

Odată ce ați localizat PID-ul procesului pe care doriți să-l terminați, transmiteți-l la comanda kill ca parametru. Pentru a termina procesul de declanșare identificat de comanda anterioară, utilizați această comandă:

kill 2099

Comanda de ucidere este un asasin tăcut – nu vă oferă niciun feedback dacă a avut succes.

Comanda pkill

Comanda pkill vă permite să omorâți un proces – sau procese – după nume. Nu trebuie să identificați procesul prin PID. Pentru a utiliza pkill, furnizați un termen de căutare pe care pkill îl folosește pentru a verifica lista de procese care rulează. Procesele de potrivire sunt încheiate. Deci, trebuie să fii sigur că ai scris corect termenul de căutare.

Ca plasă de siguranță, puteți utiliza comanda pgrep înainte de a utiliza comanda pkill. Comanda pgrep acceptă și un termen de căutare. Acesta va lista PID-ul fiecărui proces care se potrivește cu termenul de căutare. Acest lucru este sigur, deoarece pgrep nu va emite niciun semnal de ucidere a proceselor și, dacă introduceți greșit termenul de căutare, nu veți ucide un alt proces din greșeală. Vă puteți asigura că ați gândit corect termenul de căutare înainte de a-l transmite către pkill. Atât pkill, cât și pgrep tratează termenul de căutare în același mod. Tratamentul lor este atât de asemănător încât ei partajați aceeași pagină de manual.

  Cum să adăugați Facebook Messenger Chat pe Linux cu Pidgin IM

Să presupunem că există un proces cu „subq” în numele său. Vom folosi ps -u dave | comandă grep pentru a arunca o privire în spatele cortinei. Puteți vedea că „subq” se va potrivi cu acel proces și numai cu acel proces. Asta a fost doar pentru a putea vedea numele complet al procesului.

ps -u dave | grep subq

Să presupunem că utilizatorul nostru nu a făcut asta; tot ce știu este că numele procesului conține subșirul „subq”. Ei folosesc pgrep pentru a verifica dacă există o singură potrivire cu termenul de căutare. Apoi folosesc acel termen de căutare cu pkill.

pgrep subq
pkill subq

Puteți folosi pkill pentru a ucide mai multe procese simultan. Aici utilizatorul rulează pgrep pentru a verifica câte procese a lansat Chrome. Ei folosesc pkill pentru a-i ucide pe toți. Apoi verifică cu pgrep dacă toate au fost eliminate.

pgrep chrome
pkill chrome
pgrep chrome

Dacă rulează mai multe procese cu același nume, dar nu doriți să le omorâți pe toate, puteți utiliza pgrep cu opțiunea -f (linia de comandă) pentru a identifica ce proces este care. Un exemplu simplu ar fi două procese ping. Vrei să-l omori pe unul dintre ei, dar nu pe celălalt. Puteți folosi liniile lor de comandă pentru a distinge între ele. Rețineți utilizarea ghilimelelor pentru a include parametrul liniei de comandă.

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

Comandamentul Killall

Avertisment: În sistemele de operare Solaris și OpenIndiana, comanda killall va distruge toate procesele care vă aparțin. Dacă sunteți root sau dacă ați lansat sudo killall, veți reporni computerul! În timpul cercetării pentru acest articol, acest comportament a fost confirmat cu cea mai recentă versiune a OpenIndiana Hipster 2018.10.

  Cum să faci o copie de rezervă a setărilor desktop Mate pe Linux

Comanda ucidere operează într-un mod similar la comanda pkill, dar cu o diferență specifică. În loc să treceți un termen de căutare la comandă, trebuie să furnizați numele exact al procesului.

Nu puteți furniza o potrivire parțială unui nume de proces; trebuie să furnizați numele întregului proces, așa cum se arată:

killall shutt
killall shutter

Opțiunea -y (mai tânără decât) vă permite să omorâți procesele care au rulat mai puțin de o perioadă specificată. Perioada este dată în numere urmate de una dintre aceste unități:

s (secunde)
m (minute)
h (ore)
d (zile)
w (saptamani)
M (luni, notă, majusculă „M”)
y (ani)

Pentru a opri un proces numit ana care tocmai a fost lansat și pentru a lăsa orice instanțe mai vechi ale ana în funcțiune, ați putea folosi următorii parametri cu killall, dacă ați reacționat în două minute:

killall -y 2m ana

Opțiunea -o (mai vechi decât) vă permite să omorâți procesele care rulează mai mult decât o perioadă specificată. Această comandă va distruge toate conexiunile ssh care rulează mai mult de o zi:

killall -o 1d sshd

Nu fi prea fericit

Aceste comenzi vă vor permite să identificați și să încheiați procesele errate cu acuratețe și siguranță în mod corect.

Fii mereu precaut. În primul rând, asigură-te că procesul pe care ești pe cale să-l ucizi este într-adevăr cel pe care îl dorești. În al doilea rând, verificați dublu – aveți grijă și asigurați-vă că procesul vizat este cel pe care doriți să-l încheiați. Continuați cu încheierea procesului după ce sunteți mulțumit.