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.
Tartalomjegyzék
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.
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.
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.
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.