Boolean World

linux kill cover image

într-un sistem de operare, există multe programe, care pot fi rulate fie de un utilizator, fie de sistemul de operare în sine (cum ar fi serviciile de sistem). Astfel de programe care rulează pe sistem sunt numite „procese”. De obicei, un proces se termină singur atunci când își termină sarcina sau când le cereți să renunțe apăsând o comandă rapidă de la tastatură sau făcând clic pe butonul „închidere”.

cu toate acestea, uneori, un proces poate închide sau consuma o mulțime de CPU sau RAM. În această situație, ați dori să „ucideți” manual procesul. În acest articol, vom analiza diverse instrumente pe care le puteți utiliza pentru a ucide procesele pe un sistem Linux.

localizarea procesului pentru a ucide

pentru a ucide un proces, ar trebui să localizați mai întâi detaliile procesului. Puteți face acest lucru prin trei comenzi — toppspidof și pgrep. În funcție de situație, puteți utiliza una dintre aceste comenzi în acest scop.

după cum vom vedea mai târziu în acest articol, puteți ucide un proces după numele său sau ID-ul său de proces (PID). PID este un număr care identifică în mod unic un proces. Uciderea prin ID-ul procesului este utilă atunci când doriți să ucideți doar un anumit proces. Pe de altă parte, uciderea prin numele procesului este utilă atunci când doriți să ucideți toate instanțele care rulează ale unui anumit program.

localizarea procesului cu comanda de sus

vom analiza mai întâi comandatop. Porniți comanda de sus tastând:

top

veți obține o interfață interactivă, așa cum se arată mai jos. Puteți naviga prin această listă pentru a găsi numele sau PID-ul procesului pe care doriți să îl ucideți.

comanda de sus care arată o listă de procese.

pentru a parcurge această listă, puteți utiliza tastele sus / jos. În plus, comanda de sus are, de asemenea, modalități de filtrare a proceselor după utilizarea procesorului, numele utilizatorilor și proceselor, despre care puteți citi în acest ghid.

coloana din stânga conține PID-ul procesului, iar partea dreaptă conține numele programului. De exemplu, în captura de ecran de mai sus avem vnstatd proces care rulează cu un ID de proces de 263.

localizarea procesului cu comenzile ps și grep

o altă modalitate de a obține o listă a procesului este prin rularea:

ps aux

în comanda de mai sus, am folosit steagurile aux care au următoarele semnificații:

  • a: afișează procesele pentru toți utilizatorii
  • u: afișează utilizatorul care folosește procesul
  • x: afișează toate procesele. (Fără aceasta, ps nu va afișa procesele care rulează într-un mediu GUI.)

ieșirea comenzii este similară cu cea atop. PID-ul este disponibil în a doua coloană din stânga, iar numele procesului este disponibil în coloana din dreapta.

rezultatele comenzii "ps aux"."ps aux" command.

avantajul utilizăriips este că puteți filtra cu ușurință această listă cu comandagrep. De exemplu, pentru a găsi un proces asociat cu termenul „vnstat”, puteți utiliza:

ps aux | grep -i vnstat

procese de filtrare cu ps și grep, cu un rezultat pozitiv.

aici, avem două rezultate — procesulvnstatd, precum și procesulgrep. Deoarece căutam toate instanțele termenului „vnStat”și rulam și grep cu” vnstat”ca argument, am obținut grep precum și în rezultate.

astfel, chiar și atunci când nu există procese legate de „vnstat” care rulează, vom obține o intrare care aratăgrep proces:

procesele de filtrare cu ps și grep.

deci, chiar dacă am obținut un rezultat, nu există procese care să ne intereseze.

găsirea PID-ului cu pidof și pgrep

combinațiatop șipsgrep ne permite să căutăm procese. Pe de altă parte, dacă știți numele exact al unui proces, puteți utiliza pidof pentru a găsi PID-ul său.

utilizareapidof este destul de simplă. Pentru a obține PID-urile unui proces cu numele exact „nginx”, utilizați:

pidof nginx

dacă există procese cu numele exact „nginx”, veți obține o listă de PID-uri, așa cum se arată mai jos. Dacă nu există, nu veți obține nimic ca ieșire.

comanda pidof

dacă nu cunoașteți numele complet, puteți utilizapgrep în loc depidof. De exemplu, pentru a căuta toate procesele care conțin „ngin” undeva în numele lor, rulați:

pgrep ngin

aceasta va potrivi procesele cu numele exact al „nginx”, precum și orice alt proces care se potrivește cu aceleași criterii. Pentru sistemul nostru, observați că obținem toate PID-urile care aparțineau „nginx” în captura de ecran de mai sus.

comanda pgrep.

comenzilepidof șipkill vă oferă mult mai puține informații. După cum vom vedea în secțiunea următoare, există unele circumstanțe în care nu puteți ucide un proces. Ieșirea topșips conține informații suplimentare care vă ajută să determinați dacă puteți ucide cu adevărat un proces.

ce procese poți ucide?

acum că am localizat procesul, este timpul să-l ucidem. Cu toate acestea, înainte de a învăța cum să facem acest lucru, trebuie să știți câteva lucruri.

Dacă sunteți un utilizator normal, vă puteți ucide propriile procese, dar nu și cele care aparțin altor utilizatori. Ambeletop șips arată utilizatorului sub care se execută un proces. În cazul top, a doua coloană conține numele de utilizator. Cu ps aux, prima coloană conține numele de utilizator.

cu toate acestea, un utilizator rădăcină poate ucide toate procesele. Puteți adăuga sudoînainte de orice comandă pentru a o rula ca root sau puteți obține un shell rădăcină tastândsu, apoi executați comanda.

în Linux, atunci când un proces este ucis, un „semnal de terminare” este livrat procesului. Deși există multe tipuri diferite de semnale, ne ocupăm mai ales de semnalele „SIGTERM” și „SIGKILL”. Ele au o valoare numerică de 15 și respectiv 9. În mod implicit, toate comenzile de ucidere a procesului folosesc „SIGTERM”, care permite programului să ruleze un cod înainte de a ieși, permițându-i astfel să termine „grațios”. Dacă doriți să încheiați procesul forțat, puteți utiliza în schimb „SIGKILL”.

nucleul Linux menține unele informații legate de starea unui proces. Când un proces se termină, nucleul trebuie să păstreze informațiile în jur, astfel încât procesul părinte să poată afla dacă procesul copil a fost capabil să-și îndeplinească sarcinile și dacă s-a încheiat singur sau a fost ucis. Până când părintele nu a făcut acest lucru, aceste procese” zombie ” vor apărea în lista proceselor. Nu puteți ucide un astfel de proces, deoarece este doar o intrare în lista tuturor proceselor și nu are un proces real asociat cu acesta.

când un proces efectuează operații de intrare / ieșire (cum ar fi citirea sau scrierea pe discuri), se spune că se află într-o stare de „somn neîntreruptibil”. Nu poți ucide un proces în timp ce este în această stare.

puteți spune dacă un proces este în starea „zombie”(Z) sau „somn neîntreruptibil”(D) uitându-vă la coloana a 8-a a ieșiriitopps.

uciderea unui proces

există diverse comenzi pe care le puteți utiliza pentru a ucide un proces — killkillallpkill șitop. Vom începe de la cea mai simplă: comanda killall.

uciderea proceselor cu comanda killall

killall comanda este una dintre cele mai ușoare căi de a ucide un proces. Dacă știți numele exact al unui proces și știți că acesta nu rulează ca un alt utilizator și nu se află în stările Z sau D, atunci puteți utiliza această comandă direct; nu este nevoie să localizați manual procesul așa cum am descris mai sus.

în mod implicit, de exemplu, pentru a ucide un proces numit „firefox”, executați:

killall firefox

pentru a ucide forțat procesul cu SIGKILL, executați:

killall -9 firefox

puteți utiliza, de asemenea, -SIGKILL în loc de -9.

dacă doriți să ucideți procesele interactiv, puteți utiliza -i ca așa:

killall -i firefox

dacă doriți să ucideți un proces care rulează ca un utilizator diferit, puteți utiliza sudo:

sudo killall firefox

de asemenea, puteți ucide un proces care rulează pentru o anumită perioadă de timp cu steagurile -o și -y. Deci, dacă doriți să ucideți un proces care rulează mai mult de 30 de minute, utilizați:

killall -o 30m <process-name>

Dacă doriți să ucideți un proces care rulează mai puțin de 30 de minute, utilizați:

killall -y 30m <process-name>

în mod similar, utilizați următoarele abrevieri pentru unitățile de timp respective:

s seconds
m minutes
h hours
d days
w weeks
M months
y years

Killing processes with the pkill command

Sometimes, you only know part of a program’s name. La fel ca pgreppkill vă permite să ucideți procesele bazate pe potriviri parțiale. De exemplu, dacă doriți să ucideți toate procesele care conțin numele apache în nume, rulați:

pkill apache

dacă doriți să utilizați un SIGKILL în loc de un SIGTERM, utilizați:

pkill -9 apache

Din nou, puteți utiliza și -SIGKILL în loc de -9.

procesele de ucidere cu comanda kill

utilizarea comenzii kill este simplă. După ce ați aflat PID-ul procesului pe care doriți să îl ucideți, îl puteți termina folosind comanda kill. De exemplu, dacă doriți să ucideți un proces care are un PID de 1234, atunci utilizați următoarea comandă:

kill 1234

așa cum am menționat anterior, implicit este să utilizați un SIGTERM. Pentru a utiliza un SIGKILL, utilizați -9 sau -SIGKILL așa cum am văzut înainte:

kill -9 1234

uciderea proceselor cu comanda de sus

este foarte ușor de a ucide procesele folosind top comandă. Mai întâi, căutați procesul pe care doriți să îl ucideți și notați PID-ul. Apoi, apăsați k în timp ce top rulează (acest lucru este sensibil la majuscule). Acesta vă va solicita să introduceți PID-ul procesului pe care doriți să-l omoare.

după ce introduceți PID-ul, apăsați enter. Acum se va întreba ce semnal doriți să utilizați pentru a ucide procesul. Dacă doriți să utilizați SIGTERM (15), atunci pur și simplu apăsați enter, deoarece este semnalul implicit. Dacă doriți să utilizați SIGKILL(9), tastați 9 și apăsați enter.

dacă lăsați ID-ul procesului necompletat și apăsați enter direct, acesta va încheia procesul cel mai de sus din listă. Puteți derula folosind tastele săgeată și puteți schimba procesul pe care doriți să îl ucideți în acest fel.

concluzie

în acest post, am văzut diferitele moduri de a ucide procesele în Linux. Învățarea acestor comenzi este esențială pentru administrarea și gestionarea corectă a sistemului. Dacă doriți să explorați mai multe dintre aceste comenzi, aruncați o privire la paginile lor manuale respective.

dacă ți-a plăcut acest post, vă rugăm să-l împărtășească

Lasă un răspuns

Adresa ta de email nu va fi publicată.