CMD Master
Zpět na blog
AktualizovánoArnošt Havelka

Jak v Bashi bezpečně najít a ukončit zaseknutý proces

Ověřte proces a jeho PID, nejprve pošlete SIGTERM, zkontrolujte výsledek a SIGKILL použijte jen tehdy, když se proces neukončí.

Spustit interaktivní lekci
Jak v Bashi bezpečně najít a ukončit zaseknutý proces

Bezpečný postup při ukončování zaseknutého procesu je nejprve určit správný proces, ověřit jeho aktuální identifikátor (PID), poslat běžný signál TERM a zkontrolovat, zda skončil. Signál KILL použijte jen tehdy, když šetrné ukončení selhalo. Lekce ukončování procesů nabízí řízený proces, na kterém si můžete příkaz procvičit před použitím na skutečném systému.

Před odesláním signálu proces ověřte

Začněte výpisem procesů, ne PID zkopírovaným ze staré zprávy:

ps -ef

PID čtěte společně s vlastníkem a úplným příkazem. Pokud už máte kandidáta, například PID 123, výpis zúžte:

ps -p 123 -o pid,ppid,user,stat,etime,command

Hodnotu 123 nahraďte právě zjištěným PID. Identifikátory procesů lze po skončení programu znovu použít, takže samotné číslo není trvale platným důkazem. Služba navíc může mít několik pracovních procesů s podobnými názvy; ověřte, který z nich je skutečně zaseknutý.

Terminál
~$kill 3456

Požádejte proces o čisté ukončení

Po ověření kladného PID explicitně pošlete signál TERM:

kill -TERM 123

V Bashi odešle běžný příkaz kill 123 ve výchozím nastavení rovněž signál TERM. Tento signál program požádá o ukončení a umožní mu zavřít soubory, dokončit zápisy a spustit úklidové rutiny. Chvíli počkejte a poté stejný PID znovu zkontrolujte:

ps -p 123 -o pid,user,stat,command

Žádný řádek obvykle znamená, že proces skončil. Pokud řádek zůstává, proces stále existuje, příčinou však může být pomalý úklid, blokovaný vstup či výstup, pozastavený proces nebo správce, který spustil náhradu. Před dalším krokem zkontrolujte protokoly a stav služby.

SIGKILL použijte až jako poslední krok

Pokud původní proces stále existuje, ignoruje TERM a jste si jistí, že jde o správný cíl, odešlete:

kill -KILL 123

Signál KILL nelze zachytit ani ignorovat. Operační systém zastaví proces bez možnosti úklidu aplikace, takže mohou zůstat částečné zápisy, dočasné soubory nebo opuštěné podřízené procesy. Signál může ukončit bezprostřední proces, ale nedokazuje, že vyřešil původní problém.

Použijte kladný PID. Hodnoty 0, -1 a další záporná čísla mohou adresovat skupinu procesů nebo mnohem širší množinu procesů. Vyhněte se rozsáhlým zkopírovaným příkazům, například vzorům pro pkill, dokud přesně nevíte, čemu odpovídají.

Jak řešit chyby oprávnění a restartující se služby

Hláška „Operation not permitted“ obvykle znamená, že proces patří jinému účtu nebo je chráněn systémovými pravidly. Než zvážíte sudo, znovu zkontrolujte vlastníka. Oprávnění správce umožní provést správné rozhodnutí, ale neudělají nejisté PID bezpečným.

Pokud se proces okamžitě objeví znovu, možná ho restartuje správce služeb nebo orchestrátor kontejnerů. Místo opakovaného ukončování náhradních procesů zkontrolujte tohoto správce a protokoly aplikace.

Kontrola znalostí

1 / 1

Co byste měli ověřit bezprostředně před odesláním signálu?

Pokud potřebujete lépe číst výstup ps, použijte průvodce výpisem procesů. Výchozí signál a přijímané formy PID popisuje Bash v dokumentaci vestavěných příkazů pro řízení úloh.

Reference

Tyto odkazy na dokumentaci poskytují spolehlivé informace o příkazech použitých v tomto článku.

Další

Procvičování procesů

Filtrování a správa procesů.