egy operációs rendszerben sok program létezik, amelyeket akár egy felhasználó, akár maga az operációs rendszer futtathat (például rendszerszolgáltatások). A rendszeren futó programokat “folyamatoknak”nevezzük. Általában egy folyamat önmagában fejeződik be, amikor elvégezték a feladatukat, vagy amikor megkéri őket, hogy lépjenek ki egy billentyűparancs megnyomásával vagy a “Bezárás” gombra kattintva.
néha azonban egy folyamat leteheti vagy sok CPU-t vagy RAM-ot fogyaszthat. Ebben a helyzetben manuálisan szeretné “megölni” a folyamatot. Ebben a cikkben különféle eszközöket fogunk megvizsgálni, amelyekkel megölheti a folyamatokat egy Linux rendszeren.
A folyamat megölése
a folyamat megöléséhez először meg kell találnia a folyamat részleteit. Ezt három paranccsal teheti meg: top
ps
pidof
és pgrep
. A helyzettől függően ezen parancsok egyikét használhatja erre a célra.
mint később látni fogjuk ebben a cikkben, megölhet egy folyamatot a neve vagy a folyamatazonosítója (PID) alapján. A PID egy olyan szám, amely egyedileg azonosítja a folyamatot. A folyamatazonosítóval történő megölés akkor hasznos, ha csak egy adott folyamatot akar megölni. Másrészt a folyamatnévvel történő megölés akkor hasznos, ha meg akarja ölni egy adott program összes futó példányát.
A folyamat megkeresése a felső paranccsal
először megnézzük a top
parancsot. Írja be a felső parancsot:
top
interaktív felületet kap, az alábbiak szerint. Böngészhet ezen a listán, hogy megtalálja a megölni kívánt folyamat nevét vagy PID-jét.
a lista böngészéséhez használja a Fel/Le gombokat. Ezenkívül a felső parancsnak is van módja a folyamatok szűrésére a CPU-használat, a felhasználó és a folyamatnevek alapján, amelyekről ebben az útmutatóban olvashat.
a bal szélső oszlop tartalmazza a folyamat PID-jét, a jobb oldalon pedig a program nevét. Például a fenti képernyőképen a vnstatd
folyamat 263-as folyamatazonosítóval fut.
A folyamat megkeresése ps és grep parancsokkal
a folyamat listájának másik módja a Futtatás:
ps aux
a fenti parancsban a aux
jelzőket használtuk, amelyek jelentése a következő:
-
a
: folyamatok megjelenítése minden felhasználó számára -
u
: a folyamatot használó felhasználó megjelenítése -
x
: az összes folyamat megjelenítése. (Enélkül aps
nem jeleníti meg a GUI környezetben futó folyamatokat.)
a parancs kimenete hasonló a top
parancs kimenetéhez. A PID a bal oldali második oszlopban, a folyamat neve pedig a jobb szélső oszlopban érhető el.
a ps
használatának előnye, hogy könnyen szűrheti ezt a listát agrep
paranccsal. Például a “vnstat” kifejezéshez társított folyamat megtalálásához használhatja:
ps aux | grep -i vnstat
itt két eredményt kaptunk — a vnstatd
folyamatot, valamint a grep
folyamatot. Mivel a “vnstat” kifejezés összes példányát kerestük, és a grep
– t is futtattuk a “vnstat” argumentummal, megkaptuk a grep
eredményt is.
így, még akkor is, ha nincs “vnstat” kapcsolódó folyamatok futó, mi lenne kap egy bejegyzést mutatja a grep
process:
Tehát annak ellenére, hogy eredményt kaptunk, nincsenek számunkra érdekes folyamatok.
a PID megtalálása a pidof és a pgrep segítségével
a top
és ps
grep
kombináció lehetővé teszi a folyamatok keresését. Másrészt, ha tudja a folyamat pontos nevét, használhatja pidof
hogy megtalálja a PID-jét.
a pidof
használata elég egyszerű. Egy folyamat PID-jeinek pontos “nginx” névvel történő megszerzéséhez használja:
pidof nginx
Ha vannak olyan folyamatok, amelyek pontos neve “nginx”, akkor kap egy listát a PID-ekről, az alábbiak szerint. Ha nincs, akkor semmit sem kap, mint a kimenet.
Ha nem tudja a teljes nevet, használhatja pgrep
a pidof
helyett. Például az összes olyan folyamat kereséséhez, amely valahol a nevükben “ngin” – t tartalmaz, futtassa:
pgrep ngin
Ez megfelel a folyamatoknak az “nginx” pontos nevével, valamint bármely más, ugyanazon kritériumoknak megfelelő folyamattal. Rendszerünknél vegye figyelembe, hogy a fenti képernyőképen megkapjuk az összes “nginx” – hez tartozó PID-t.
a pidof
éspkill
parancsok sokkal kevesebb információt adnak. Amint a következő részben látni fogjuk, vannak olyan körülmények, amelyekben nem lehet megölni egy folyamatot. A top
és ps
kimenete további információkat tartalmaz, amelyek segítenek meghatározni, hogy valóban meg lehet-e ölni egy folyamatot.
milyen folyamatokat lehet megölni?
most, hogy megtaláltuk a folyamatot, itt az ideje, hogy megöljük. Mielőtt azonban megtanulnánk, hogyan kell ezt megtenni, néhány dolgot tudnia kell.
ha normális felhasználó vagy, megölheted a saját folyamataidat, de nem azokat, amelyek más felhasználókhoz tartoznak. Mind a top
, mind a ps
megmutatja azt a felhasználót, amely alatt egy folyamat fut. top
esetén a második oszlop tartalmazza a felhasználónevet. ps aux
esetén az első oszlop tartalmazza a felhasználónevet.
a root felhasználó azonban minden folyamatot megölhet. Hozzáadhatja asudo
parancsot a root futtatásához, vagy asu
beírásával gyökérhéjat kaphat, majd végrehajthatja a parancsot.
Linuxban, amikor egy folyamatot megölnek, egy “lezáró jel” kerül a folyamatba. Bár számos különböző típusú jel létezik, leginkább a “SIGTERM” és a “SIGKILL” jelekkel foglalkozunk. Számértékük 15, illetve 9. Alapértelmezés szerint az összes folyamatölési parancs a “SIGTERM” – et használja, amely lehetővé teszi a program számára, hogy kilépjen egy bizonyos kódot, így lehetővé teszi a “kecsesen”befejezését. Ha erőszakkal szeretné megszüntetni a folyamatot, használhatja a “SIGKILL” – et.
a Linux kernel fenntart néhány információt a folyamat állapotáról. Amikor egy folyamat befejeződik, a kernelnek meg kell őriznie az információkat, hogy a szülőfolyamat megtudja, hogy a gyermekfolyamat képes volt-e elvégezni a feladatait, és hogy önmagában megszűnt-e, vagy megölték. Amíg a szülő nem tette meg, ezek a “zombi” folyamatok megjelennek a folyamatok listájában. Nem lehet megölni egy ilyen folyamatot, mert ez csak egy bejegyzés az összes folyamat listájában,és nincs hozzá tényleges folyamat.
amikor egy folyamat bemeneti/kimeneti műveleteket hajt végre (például lemezekről olvas vagy ír), azt mondják, hogy “Szünetmentes alvás”állapotban van. Nem lehet megölni egy folyamatot, amíg ebben az állapotban van.
a top
ps
kimenet 8.oszlopának megtekintésével megállapíthatja, hogy egy folyamat”zombi”(Z) vagy”szünetmentes alvás”(D) állapotban van-e.
folyamat megölése
különböző parancsok használhatók egy folyamat megölésére — kill
killall
pkill
éstop
. A legegyszerűbbtől kezdjük: a killall
parancs.
folyamatok megölése a killall paranccsal
a killall
parancs az egyik legegyszerűbb módja egy folyamat megölésének. Ha tudja a folyamat pontos nevét, és tudja, hogy nem más felhasználóként fut, és nem Z vagy D állapotban van, akkor közvetlenül használhatja ezt a parancsot; nincs szükség manuálisan megtalálni a folyamatot a fent leírtak szerint.
alapértelmezés szerint például egy “firefox” nevű folyamat megöléséhez futtassa:
killall firefox
a folyamat erőszakos megöléséhez a SIGKILL segítségével futtassa:
killall -9 firefox
a -SIGKILL
helyett -9
is használható.
ha interaktívan szeretné megölni a folyamatokat, használhatja a -i
hasonló:
killall -i firefox
Ha egy másik felhasználóként futó folyamatot szeretne megölni, használhatja a sudo
:
sudo killall firefox
a -o
és -y
jelzőkkel egy bizonyos ideig futó folyamatot is megölhet. Tehát, ha meg akar ölni egy több mint 30 percig futó folyamatot, használja:
killall -o 30m <process-name>
Ha meg akar ölni egy olyan folyamatot, amely kevesebb, mint 30 percig fut, használja:
killall -y 30m <process-name>
hasonlóképpen használja a következő rövidítéseket a megfelelő időegységekhez:
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. Csakúgy, mint a pgrep
pkill
lehetővé teszi a részleges egyezéseken alapuló folyamatok megölését. Például, ha meg akarja ölni az összes folyamatot, amely tartalmazza a nevet apache
a névben futtassa:
pkill apache
Ha SIGKILL-et szeretne használni SIGTERM helyett, használja:
pkill -9 apache
ismét használhatja a
-SIGKILL
a-9
helyett.
A kill paranccsal történő megölési folyamatok
a kill parancs használata egyszerű. Miután megtudta a megölni kívánt folyamat PID-jét, leállíthatja azt a kill
paranccsal. Például, ha meg akar ölni egy folyamatot, amelynek PID értéke 1234, akkor használja a következő parancsot:
kill 1234
mint korábban említettük, az alapértelmezett a SIGTERM használata. A SIGKILL használatához használja a -9
vagy -SIGKILL
amint azt korábban láttuk:
kill -9 1234
leölési folyamatok a felső paranccsal
nagyon könnyű megölni a folyamatokat a top
parancs. Először keresse meg azt a folyamatot, amelyet meg akar ölni, és jegyezze fel a PID-t. Ezután nyomja meg ak
gombot, amíg a top fut (ez nagybetűérzékeny). Felszólítja Önt, hogy adja meg a megölni kívánt folyamat PID-jét.
a PID megadása után nyomja meg az enter billentyűt. Most megkérdezi, hogy melyik jelet szeretné használni a folyamat megöléséhez. Ha a SIGTERM(15) – et szeretné használni, akkor egyszerűen nyomja meg az enter billentyűt, mivel ez az alapértelmezett jel. Ha a SIGKILL(9) – et szeretné használni, írja be a 9-et, majd nyomja meg az enter billentyűt.
ha üresen hagyja a folyamatazonosítót, és közvetlenül lenyomja az enter billentyűt, akkor a lista legfelső folyamata befejeződik. A nyílbillentyűkkel görgethet, és megváltoztathatja a megölni kívánt folyamatot.
következtetés
ebben a bejegyzésben láttuk a Linux folyamatok megölésének különböző módjait. Ezeknek a parancsoknak a megtanulása elengedhetetlen a megfelelő rendszer adminisztrációhoz és menedzsmenthez. Ha többet szeretne felfedezni ezekből a parancsokból, nézze meg a megfelelő man oldalakat.
Ha tetszett ez a bejegyzés, kérjük, ossza meg!