Boolean

linux zabít obálka

V operačním systému, existuje mnoho programů, které mohou být buď spustit uživatelem nebo OS sám (jako jsou systémové služby). Takové programy, které jsou spuštěny v systému, se nazývají „procesy“. Obvykle se proces ukončí sám o sobě, když dokončíte svůj úkol, nebo když je požádáte o ukončení stisknutím klávesové zkratky nebo kliknutím na tlačítko“ Zavřít“.

někdy však může proces zavěsit nebo spotřebovat hodně CPU nebo RAM. V této situaci byste chtěli proces ručně „zabít“. V tomto článku se podíváme na různé nástroje, které můžete použít k zabíjení procesů v systému Linux.

umístění procesu k zabití

Chcete-li proces zabít, měli byste nejprve vyhledat podrobnosti procesu. Můžete dělat to přes tři příkazy — toppspidofpgrep. V závislosti na situaci můžete pro tento účel použít jeden z těchto příkazů.

jak uvidíme později v tomto článku, můžete proces zabít jeho jménem nebo jeho ID procesu (PID). PID je číslo, které jednoznačně identifikuje proces. Zabíjení pomocí ID procesu je užitečné, pokud chcete zabít pouze určitý proces. Na druhou stranu, zabíjení názvem procesu je užitečné, pokud chcete zabít všechny spuštěné instance konkrétního programu.

vyhledání procesu pomocí horního příkazu

nejprve se podíváme na příkaz top. Spusťte horní příkaz zadáním:

top

získáte interaktivní rozhraní, jak je uvedeno níže. V tomto seznamu můžete procházet název nebo PID procesu, který chcete zabít.

horní příkaz zobrazující seznam procesů.

Chcete-li procházet tento seznam, můžete použít klávesy nahoru/dolů. Kromě toho má horní příkaz také způsoby filtrování procesů podle využití CPU, uživatelských a procesních názvů, o kterých si můžete přečíst v této příručce.

sloupec zcela vlevo obsahuje PID procesu a pravá strana obsahuje název programu. Jako příklad na výše uvedeném snímku obrazovky máme proces vnstatd běžící s ID procesu 263.

Lokalizace proces s ps a grep příkazy

Další způsob, jak získat seznam proces je příkazem:

ps aux

V příkazu výše, jsme použili vlajky aux, které mají následující významy:

  • a: Zobrazit procesy všech uživatelů
  • u: Zobrazení uživatele, který je pomocí procesu
  • x: Zobrazí všechny procesy. (Bez toho ps nezobrazí procesy běžící v prostředí GUI.)

výstup příkazu je podobný výstupu top. PID je k dispozici ve druhém sloupci zleva a název procesu je k dispozici v pravém sloupci.

výsledky příkazu" ps aux"."ps aux" command.

výhodou použití ps je, že můžete snadno filtrovat tento seznam s grep příkaz. Například, najít proces spojený s pojmem „vnstat“, můžete použít:

ps aux | grep -i vnstat

Filtrování procesů s ps a grep, s pozitivním výsledkem.

zde jsme získali dva výsledky-proces vnstatd a proces grep. Protože jsme hledali všechny instance výrazu „vnstat“ a také jsme spustili grep s argumentem „vnstat“, dostali jsme grep ve výsledcích.

a Tak, i když nejsou tam žádné „vnstat“ související procesy běží, dostali bychom jedna položka zobrazující grep postup:

Filtrování procesů s ps a grep.

takže i když jsme získali výsledek, neexistují žádné procesy, které by nás zajímaly.

Hledání PID s pidof a pgrep

toppsgrep kombinace nám umožňuje hledat procesů. Na druhou stranu, pokud znáte přesný název procesu, můžete použít pidof k nalezení jeho PID.

použití pidof je velmi jednoduché. Na ten Pid procesu, s přesným názvem „nginx“, použít:

pidof nginx

Pokud jsou procesy s přesným názvem „nginx“, dostanete seznam Pid, jak je uvedeno níže. Pokud nejsou žádné, nedostanete nic jako výstup.

příkaz pidof

Pokud neznáte celý název, můžete použít pgrep místo pidof. Jako příklad, vyhledejte všechny procesy, které obsahují „ngin“ někde v jejich jméno, spustit:

pgrep ngin

Toto se bude shodovat procesů s přesným názvem „nginx“, stejně jako jakýkoli jiný proces, který odpovídá stejná kritéria. Pro náš systém si všimněte, že na výše uvedeném snímku obrazovky dostáváme všechny PID, které patřily „nginx“.

příkaz pgrep.

příkazypidof apkill vám poskytnou mnohem méně informací. Jak uvidíme v další části, existují určité okolnosti, za kterých nemůžete proces zabít. Výstup topps obsahovat další informace, které vám pomohou určit, zda můžete opravdu zabít proces.

jaké procesy můžete zabít?

Nyní, když jsme Lokalizovali proces, je čas ho zabít. Než se však naučíme, jak to udělat, musíte vědět několik věcí.

Pokud jste normální uživatel, můžete zabít své vlastní procesy, ale ne ty, které patří jiným uživatelům. Oba top a ps ukazují uživatele, pod kterým je proces spuštěn. V případě top obsahuje druhý sloupec uživatelské jméno. U ps aux obsahuje první sloupec uživatelské jméno.

uživatel root však může zabít všechny procesy. Můžete buď přidat sudo před libovolný příkaz spustit jako root, nebo-li získat root shell zadáním su, a pak spustit příkaz.

v Linuxu, když je proces zabit, je do procesu doručen „ukončovací signál“. I když existuje mnoho různých typů signálů, většinou se zabýváme signály“ SIGTERM „a“ SIGKILL“. Mají číselnou hodnotu 15 a 9. Ve výchozím nastavení všechny příkazy procesu zabíjení používají „SIGTERM“, což umožňuje programu spustit nějaký kód před jeho ukončením, což mu umožňuje ukončit „elegantně“. Pokud chcete proces ukončit násilně, můžete místo toho použít“ SIGKILL“.

linuxové jádro uchovává některé informace týkající se stavu procesu. Po ukončení procesu musí jádro uchovávat informace kolem, aby rodičovský proces mohl zjistit, zda byl podřízený proces schopen dokončit své úkoly a zda byl ukončen sám, nebo byl zabit. Dokud tak rodič neučiní, objeví se tyto procesy „zombie“ v seznamu procesů. Takový proces nemůžete zabít, protože je to jen položka v seznamu všech procesů a nemá s ním spojený skutečný proces.

když proces provádí vstupní/výstupní operace (například čtení z nebo zápis na disky), říká se, že je ve stavu „nepřerušitelného spánku“. Nemůžete zabít proces, když je v tomto stavu.

můžete poznat, když proces je v „zombie“(Z) nebo „nepřerušitelný spánek“(D) stát při pohledu na 8. sloupec topps výstup.

Zabít proces

Existují různé příkazy, které můžete použít k zabít proces — killkillallpkilltop. Začneme od nejjednoduššího: příkaz killall.

zabíjení procesů pomocí příkazu killall

příkaz killall je jedním z nejjednodušších způsobů, jak zabít proces. Pokud znáte přesný název procesu, a víte, že to není běh jako jiný uživatel a to není v Z nebo D států, pak tento příkaz můžete použít přímo, není potřeba ručně najít postup, jak jsme popsali výše.

ve výchozím nastavení, například, zabít proces s názvem „firefox“, spustit:

killall firefox

násilně zabít proces s SIGKILL, běh:

killall -9 firefox

můžete také použít -SIGKILL místo -9.

Pokud chcete zabít procesy interaktivně, můžete použít -i tak jako:

killall -i firefox

Pokud chcete zabít proces běží jako jiný uživatel, můžete použít sudo:

sudo killall firefox

můžete také zabít proces, který běží již určitou dobu s -o-y vlajky. Takže, pokud chcete zabít proces, který běží již více než 30 minut, použijte:

killall -o 30m <process-name>

Pokud chcete zabít proces, který byl spuštěn za méně než 30 minut, použijte:

killall -y 30m <process-name>

Podobně, použijte následující zkratky pro jednotlivé jednotky času:

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. Stejně jako pgreppkill umožňuje zabíjet procesy na základě částečné shody. Například, pokud chcete zabít všechny procesy obsahující název apache v názvu, run:

pkill apache

Pokud chcete používat SIGKILL místo SIGTERM, použití:

pkill -9 apache

Opět, můžete také použít -SIGKILL místo -9.

procesy zabíjení příkazem kill

použití příkazu kill je jednoduché. Jakmile jste zjistili, PID procesu, který chcete zabít, můžete ukončit pomocí kill příkaz. Například, pokud chcete zabít proces s PID 1234, pak použijte následující příkaz:

kill 1234

Jak jsme se zmínili dříve, výchozí je použití SIGTERM. Použít SIGKILL, používání -9 nebo -SIGKILL jak jsme viděli předtím:

kill -9 1234

Zabíjení procesů s nejvyšší příkaz

je velmi snadné zabít procesy pomocí top příkaz. Nejprve vyhledejte proces, který chcete zabít, a poznamenejte si PID. Poté stiskněte k, zatímco top je spuštěn(toto je malá a velká písmena). Vyzve vás k zadání PID procesu, který chcete zabít.

po zadání PID stiskněte klávesu enter. Nyní se zeptá, který signál chcete použít k zabití procesu. Pokud chcete použít SIGTERM (15), jednoduše stiskněte klávesu enter, protože se jedná o výchozí signál. Pokud chcete použít SIGKILL (9), Zadejte 9 a stiskněte klávesu enter.

Pokud necháte ID procesu prázdné a stisknete klávesu enter přímo, ukončí proces nejvyšší v seznamu. Můžete posouvat pomocí kláves se šipkami, a změnit proces, který chcete zabít tímto způsobem.

závěr

v tomto příspěvku jsme viděli různé způsoby, jak zabít procesy v Linuxu. Učení těchto příkazů je nezbytné pro správnou správu a správu systému. Pokud chcete prozkoumat více těchto příkazů, podívejte se na jejich příslušné manuálové stránky.

Pokud se vám tento příspěvek líbil, sdílejte jej prosím 🙂

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.