Ukončení běžících procesů

Popis problému (otázka, symptom...)

Někdy se může stát, že Vám nějaká aplikace zhavaruje, a zůstane tam po ní běžet řada procesů, které konzumují výpočetní čas a blokují tak výkon ostatním uživatelům. Může k tomu dojít třeba i tak, že spadne spojení na výpočetní server a Vy se musíte připojit znovu. Zejména v takovém případě je nutné, abyste zkontrolovali, jestli Vám tam nezůstalo něco běžet.

Řešení

Nejjednodušší je použít příkaz top, který zobrazí výpočetně náročné procesy a řadí je podle procenta konzumovaného výkonu. Pokud víte, že Vám tam nemá běžet žádný výpočet, a přesto se nějaký proces s Vaším uživatelským jménem v tomto výpisu vyskytuje, můžete jej ukončit pomocí příkazu kill. Z prvního sloupce můžete zjistit tzv. PID (číslo procesu, process identification), například 16232, a pak na příkazové řádce zadáte

kill 16232

Nebo to ukončení lze provést interaktivně přímo z programu top, kde stisknete klávesu "k", pak můžete zadat číslo procesu, a pak se Vás to ještě zeptá na číslo signálu (většinou by mělo stačit ponechat standardní hodnotu 15 - SIGTERM , pokud ne, tak můžete zkusit 9 - SIGKILL). Na příkazové řádce lze signál -9 pro bezpodmínečné ukončení procesu zadat následovně

kill -9 16232

Další možností je použití programu htop, kde lze na konkrétní proces najet pomocí kurzorových kláves a pak pro ukončení lze stisknout F9.

Pro vypsání všech běžících procesů, patřících nějakému uživateli, lze použít příkaz ps. Tento příkaz Vám vypíše všechny procesy, ne jen ty, které konzumují nějaký výpočetní čas. Lze to například následovně

ps -fu lukesj

Všechny procesy nemusí zatěžovat systém z hlediska výkonu, a někdy může být složitější se zorientovat v tom, které procesy patří k aktuální seanci, a které jsou nějaké pozůstatky po předchozích. Nejjednoduší je to asi podle sloupce STIME, což odpovídá času spuštění (Start Time). Ve sloupci TIME je uveden již spotřebovaný výpočetní čas, a ve druhém sloupci (PID) je pak číslo procesu, které lze použít jako parametr příkazu kill. Pokud chceme ukončit více procesů najednou, lze jich použít více jako parametry jednoho příkazu kill, to například takto

kill 8471 8476 8477

a pokud se Vám přesto nepodaří některé procesy ukončit, můžete jim zkusit poslat signál SIGKILL (-9)

kill -9 8471 8476 8477

Závěrem výzva pro uživatele: dávejte si na to skutečně pozor a kontrolujte si, jestli po Vás nezůstane něco bežet, protože velice často pak dochází ke scénáři typu, že nespokojení uživatelé volají správci systému, ať rychle něco udělá s procesy jiných uživatelů, které tam již týden visí a blokují (zpomalují) jejich práci (výuku).

FAQ#280   Výpočetní servery   29.9.2023 (10:09)  Jiří Vyhnánek  
FAHE v2.1 (master/883e3d93/2022-05-23/12:17) © 2015,2016 by JŠ