logikai világ

linux kill cover image

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: toppspidof é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 felső parancs, amely a folyamatok listáját mutatja.

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 a ps nem jeleníti meg a GUI környezetben futó folyamatokat.)

a parancs kimenete hasonló a topparancs kimenetéhez. A PID a bal oldali második oszlopban, a folyamat neve pedig a jobb szélső oszlopban érhető el.

a "ps aux" parancs eredményei."ps aux" command.

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

szűrési folyamatok ps és grep segítségével, pozitív eredménnyel.

itt két eredményt kaptunk — a vnstatdfolyamatot, 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:

szűrési folyamatok ps és grep.

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 psgrep 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.

a pidof parancs

Ha nem tudja a teljes nevet, használhatja pgrep a pidofhelyett. 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 pgrep parancs.

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 topps 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 — killkillallpkill é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 -9is 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 pgreppkill 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

-SIGKILLa-9helyett.

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!

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.