î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 — top
ps
pidof
ș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.
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.
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
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:
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
șips
grep
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.
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.
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șiriitop
ps
.
uciderea unui proces
există diverse comenzi pe care le puteți utiliza pentru a ucide un proces — kill
killall
pkill
ș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 pgrep
pkill
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ă