Folyamatok leállítása a Linux terminálról

Egy folyamat megölése néha az egyetlen módja annak, hogy megszabaduljunk tőle. A kemény elnevezés ellenére a folyamat „megölése” csak annyit jelent, hogy „leállásra kényszerítjük”. A következőképpen teheti meg ezt a Linux vagy a macOS parancssorból.

Mi az a folyamat?

Az olyan programok futtatása, mint a webböngésző, az asztali környezethez kapcsolódó háttérfolyamatok és a Linux rendszerszolgáltatások mind folyamatok.

A folyamatokat két csoportba sorolhatja:

Az előtérbeli folyamatok azok, amelyeket egy felhasználó indított el vagy indított el. Lehetnek egy terminál ablakban, vagy lehetnek grafikus alkalmazások.
A háttérfolyamatok mindazon folyamatok, amelyek automatikusan elindulnak, és nem lépnek kapcsolatba a felhasználókkal. Nem várnak inputot a felhasználóktól, és nem mutatnak be eredményeket vagy kimeneteket nekik. A háttérfolyamatok olyan dolgok, mint a szolgáltatások és a démonok.

Ha az előtérben zajló folyamatok a színházi személyzet és a színészek frontja, a háttérfolyamatok a kulisszák mögötti csapat.

Ha a folyamatok hibásan vagy rosszul működnek, túl sok CPU-időt veszíthetnek fel, fogyaszthatják a RAM-ot, vagy szűk számítási hurokba léphetnek, és nem reagálnak. A grafikus alkalmazások megtagadhatják az egérkattintásokra való reagálást. Előfordulhat, hogy a terminálalkalmazások soha nem térnek vissza a parancssorba.

A humánus válasz

Egy folyamat „megölése” csak annyit jelent, hogy „a folyamat abbahagyására kényszerítjük”. Erre akkor lehet szükség, ha a folyamat nem hajlandó válaszolni.

A Linux biztosítja a kill, pkill és killall parancsokat, amelyek lehetővé teszik ezt. Ezek a parancsok bármilyen típusú folyamathoz használhatók, grafikus vagy parancssoros, előtérben vagy háttérben.

  Linux-alkalmazások futtatása a Bash-ból Windows 10 rendszeren [Guide]

Az ölési parancs

A kill használatához ismernie kell a leállítani kívánt folyamat folyamatazonosítóját (PID). A ps paranccsal meg lehet keresni egy folyamat PID-jét.

Ha a ps-t az összes folyamaton keresztül szeretné keresni, használja az -e (összes folyamat) opciót. Célszerű a kimenetet kevesebben átvezetni, elég sok lesz belőle. Írja be: ps, szóköz, -e, szóköz, | (cső karakter), még egy szóközt, majd írjon kevesebbet. Nyomja meg az Enter billentyűt a parancs végrehajtásához.

ps -e | less

Ez egy folyamatlistát ad, amely hasonló az alábbi képernyőképhez. A / gombbal előre kereshet, visszafelé pedig a ? kulcs.

Az Önt érdeklő folyamat megismeréséhez vezesse át a ps kimenetét a grep-en keresztül, és adja meg a folyamat nevét – vagy a nevének egy részét.

ps -e | grep shutter

Miután megtalálta a leállítani kívánt folyamat PID-jét, adja át paraméterként a kill parancsnak. Az előző parancs által azonosított zárfolyamat leállításához használja ezt a parancsot:

kill 2099

A kill parancs egy csendes bérgyilkos – nem ad visszajelzést, ha sikeres volt.

A pkill parancs

A pkill parancs lehetővé teszi egy folyamat – vagy folyamatok – név szerinti megölését. A folyamatot nem kell PID alapján azonosítania. A pkill használatához adjon meg egy keresési kifejezést, amelyet a pkill használ a futó folyamatok listájának összehasonlítására. Az egyeztetési folyamatok leállnak. Tehát biztosnak kell lennie abban, hogy a keresett kifejezést helyesen írta-e be.

Biztonsági hálóként a pgrep parancsot használhatja a pkill parancs használata előtt. A pgrep parancs is elfogad egy keresési kifejezést. Felsorolja minden olyan folyamat PID-jét, amely megfelel a keresési kifejezésnek. Ez biztonságos, mert a pgrep nem ad ki semmilyen tiltó jelet a folyamatoknak, és ha rosszul írja be a keresett kifejezést, akkor nem fog véletlenül leállítani egy másik folyamatot. Győződjön meg arról, hogy a keresett kifejezést helyesen gondolta át, mielőtt átadja a pkillnek. A pkill és a pgrep is ugyanúgy kezeli a keresett kifejezést. A kezelésük annyira hasonló, hogy ők megosztani ugyanazt a kézikönyvoldalt.

  A Windows 10 lehetővé teszi az egyéni Linux kernel betöltését

Tegyük fel, hogy van egy folyamat, amelynek nevében a „subq” szerepel. A ps -u dave | parancsot fogjuk használni grep parancsot, hogy bepillantson a függöny mögé. Láthatja, hogy a „subq” megegyezik ezzel a folyamattal és egyedül azzal a folyamattal. Ez csak azért volt, hogy láthassa a folyamat teljes nevét.

ps -u dave | grep subq

Tegyük fel, hogy a felhasználónk ezt nem tette meg; csak annyit tudnak, hogy a folyamat neve tartalmazza a „subq” karakterláncot. A pgrep segítségével ellenőrzik, hogy csak egy találat van-e a keresett kifejezésre. Ezután ezt a keresési kifejezést a pkill-lel használják.

pgrep subq
pkill subq

A pkill segítségével egyszerre több folyamatot is leállíthat. Itt a felhasználó a pgrep parancsot futtatja, hogy ellenőrizze, hány folyamatot indított el a Chrome. A pkill-t használják, hogy megöljék mindet. Ezután a pgrep segítségével ellenőrzik, hogy mindegyiket eltávolították-e.

pgrep chrome
pkill chrome
pgrep chrome

Ha több azonos nevű folyamat fut, de nem akarja mindegyiket leállítani, akkor a pgrep -f (parancssor) kapcsolóval azonosíthatja, melyik folyamat melyik. Egy egyszerű példa két ping folyamat lehet. Meg akarod ölni az egyiket, de a másikat nem. A parancssoraik segítségével megkülönböztetheti őket. Ügyeljen arra, hogy a parancssori paramétert idézőjelekbe kell tenni.

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

A killall parancs

Figyelmeztetés: A Solaris és az OpenIndiana operációs rendszerekben a killall parancs megöli az összes Önhöz tartozó folyamatot. Ha root vagy, ha kiadtad a sudo killall-t, akkor újraindítod a számítógéped! A cikkhez kapcsolódó kutatás során ezt a viselkedést az OpenIndiana Hipster 2018.10 legújabb verziója is megerősítette.

  Linux telepítése Mac-re

A killall parancs hasonló módon működik a pkill parancshoz, de bizonyos különbséggel. Ahelyett, hogy egy keresési kifejezést adna át a parancsnak, meg kell adnia a folyamat pontos nevét.

Nem biztosíthat részleges egyezést a folyamatnévvel; meg kell adnia a teljes folyamatnevet, az ábrán látható módon:

killall shutt
killall shutter

Az -y (fiatalabb mint) opció lehetővé teszi a meghatározott időszaknál rövidebb ideig futó folyamatok leállítását. A periódus számokkal van megadva, amelyet a következő mértékegységek egyike követ:

s (másodperc)
m (perc)
h (óra)
d (nap)
w (hetek)
M (hónap, jegyzet, nagy „M”)
y (év)

A most elindított ana nevű folyamat leállításához és az ana minden régebbi példányának futásnak hagyásához használhatja a következő paramétereket a killall-lal, ha két percen belül reagált:

killall -y 2m ana

Az -o (régebbi mint) opció lehetővé teszi a meghatározott időszaknál hosszabb ideig futó folyamatok leállítását. Ez a parancs megsemmisíti az összes ssh-kapcsolatot, amely egy napnál tovább fut:

killall -o 1d sshd

Ne légy túl boldog

Ezek a parancsok lehetővé teszik a hibás folyamatok pontos és biztonságos azonosítását és leállítását.

Mindig legyen óvatos. Először is győződjön meg arról, hogy a megölni készülő folyamat valóban az, amit szeretne. Másodszor, ellenőrizze még egyszer – legyen óvatos, és győződjön meg arról, hogy a célzott folyamatot szeretné befejezni. Folytassa a folyamat leállításával, ha elégedett.