Příkazy nice
a renice
představují nástroje pro jemné ladění chování jádra operačního systému při správě spuštěných procesů. Umožňují vám upravovat priority procesů a ovlivňovat tak jejich přidělování systémových zdrojů. V tomto článku se dozvíte, jak tyto příkazy využívat v operačních systémech Linux a jemu podobných, jako je macOS.
Základní princip: Procesy a jejich správa
Ve vašem počítači s Linuxem či Unixem běží mnoho procesů ještě před spuštěním vámi zvolené aplikace. Většina z nich jsou klíčové součásti systému nebo podpůrné procesy pro grafické prostředí. Systém neustále pracuje na pozadí a má k dispozici omezené množství systémových prostředků a času procesoru. Jádro Linuxu hraje roli koordinátora těchto procesů.
Jádro rozhoduje o tom, které procesy získají aktuálně prioritu a které musí počkat. Neustále analyzuje a žongluje s prioritami, aby zajistilo plynulý chod počítače a spravedlivé přidělení systémových prostředků. Některé procesy jsou pro správnou funkci systému klíčové a mají prioritu před ostatními, jako například před webovým prohlížečem.
Co je to „nice“ hodnota?
Jedním z klíčových kritérií, podle kterých jádro rozhoduje o prioritě procesu, je tzv. „nice“ hodnota. Každý proces má přidělenu tuto hodnotu, která se pohybuje v rozmezí od -19 do 20. Standardně jsou všechny procesy spouštěny s „nice“ hodnotou 0.
Platí, že čím vyšší je „nice“ hodnota, tím „ohleduplnější“ je daný proces k ostatním. Jádru sděluje, že proces klidně počká. Naopak, záporná „nice“ hodnota značí sobeckost procesu, který se snaží získat co nejvíce procesorového času bez ohledu na ostatní běžící procesy.
Příkaz nice
slouží k nastavení „nice“ hodnoty při spouštění procesu, zatímco renice
umožňuje upravit tuto hodnotu u již spuštěného procesu. Další informace naleznete v manuálových stránkách: nice a renice.
Příkaz nice
v praxi
Příkaz nice
umožňuje ovlivnit prioritu procesu při jeho spuštění, čímž můžeme zvýšit nebo snížit jeho nároky na systémové zdroje ve srovnání s ostatními procesy.
Představme si situaci, kdy programátor vytvořil program s názvem ackermann
, který počítá Ackermannovy funkce. Tento výpočet je náročný na procesor a paměť. Programátor by mohl program spustit pomocí příkazu:
./ackermann
Pro monitorování spuštěných procesů a jejich priorit můžeme použít příkaz top
:
top
Informace o procesu ackermann
najdeme v horní části výpisu. Sloupec „NI“ udává „nice“ hodnotu, která je standardně nastavena na 0.
Nyní zkusíme proces spustit znovu, ale tentokrát mu nastavíme nižší prioritu. Použijeme příkaz nice
s „nice“ hodnotou 15. Příkaz má následující syntaxi: nice -[hodnota] [příkaz]
, kde [hodnota]
je nová „nice“ hodnota a [příkaz]
je spouštěný program. V našem příkladě:
nice -15 ./ackermann
Pozor, -15
zde neznamená zápornou hodnotu -15, ale kladnou 15. Znak -
je použit pro signalizaci parametru. Pro nastavení záporné „nice“ hodnoty je potřeba použít dva znaky -
.
Spuštěním příkazu top
znovu uvidíme změnu v chování procesu ackermann
:
top
S „nice“ hodnotou 15 proces ackermann
již nespotřebovává tolik procesorového času. Procesy jako GNOME a Rhythmbox nyní využívají více zdrojů, čímž se dosáhlo snížení priority procesu ackermann
.
Nyní si ukážeme opačný případ, kdy procesu ackermann
přiřadíme zápornou „nice“ hodnotu. Všimněte si použití dvou znaků -
. Pro nastavení procesu s vyšší prioritou (nižší „nice“ hodnota) je potřeba použít sudo
. Každý uživatel si může nastavit nižší prioritu procesu, ale vyšší prioritu může nastavit pouze administrátor (root):
sudo nice --10 ./ackermann
Opětovným spuštěním příkazu top
můžeme pozorovat změnu:
top
Proces ackermann
má nyní „nice“ hodnotu -10 a opět se nachází na vrcholu seznamu spotřeby procesorového času.
Příkaz renice
– úprava priority běžících procesů
Příkaz renice
nám umožňuje měnit „nice“ hodnotu u již spuštěných procesů bez nutnosti je zastavovat a restartovat. Nová hodnota se nastaví za běhu.
renice
přijímá jako parametr ID procesu (PID). PID můžeme získat ze sloupce „PID“ v příkazu top
, nebo pomocí ps
a grep
. Níže je uveden příklad vyhledání PID procesu ackermann
spuštěného uživatelem dave
:
ps -eu dave | grep ackermann
Nyní, když máme PID, můžeme ho použít s renice
. V následujícím příkladu nastavíme procesu ackermann
novou „nice“ hodnotu 5:
sudo renice -n 5 2339
Příkaz renice
nám potvrdí změnu „nice“ hodnoty a ukáže původní i novou hodnotu.
Jádro obvykle spravuje priority procesů velmi efektivně. Pokud ale spouštíte dlouhý proces, který je náročný na CPU a nezáleží vám na tom, kdy skončí, může být pro plynulý chod celého systému přínosné, pokud tomuto procesu nastavíte vyšší „nice“ hodnotu. Tím se zlepší uživatelský komfort a celková odezva systému.