Pokud v systému existuje běžící program, označuje se jako proces. V systému lze nastavit jejich prioritu pomocí příkazů nice
a renice
.
Normální program může spouštět celou řadu procesů, nemusí být jen jeden. Každý proces dostane od jádra přidělené číselné označení (PID - process identification number, identifikační číslo procesu), které můžete zjistit pomocí příkazu ps, top a dalších. Existují i grafické utility, které to umí, ale ty zde nediskutujeme .
Příklad využití:
Zatížení procesu je trvale vysoké, snižuje se odezva aplikací. Co se děje? Který proces tak zatěžuje procesor? Použijete příkaz top, který také vypisuje PID
procesů, ale výpis je defaultně řazen podle využití procesoru jednotlivými procesy:
Tasks: 121 total, 2 running, 119 sleeping, 0 stopped, 0 zombie Cpu(s): 8.6%us, 2.6%sy, 9.3%ni, 78.1%id, 1.0%wa, 0.3%hi, 0.0%si, 0.0%st Mem: 1556028k total, 1488200k used, 67828k free, 163936k buffers Swap: 3293244k total, 156k used, 3293088k free, 756536k cached Unknown command - try 'h' for help PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 6948 user 39 19 81920 42m 10m S 92.0 2.8 55:34.10 beagled-helper 6720 user 20 0 341m 134m 25m S 6.0 8.8 17:35.38 firefox-bin 6767 user 27 7 116m 73m 9196 S 3.0 4.8 61:00.91 beagled 6624 user 20 0 21600 10m 8300 S 1.0 0.7 4:23.34 gkrellm 4318 root 20 0 195m 44m 6788 S 0.7 2.9 7:31.69 X 6405 user 20 0 42064 18m 13m S 0.3 1.2 0:45.94 kicker 6736 user 20 0 32744 22m 8724 S 0.3 1.5 0:09.90 net_applet 17374 user 20 0 35800 13m 11m R 0.3 0.9 0:00.76 konsole 18232 root 20 0 2168 1000 784 R 0.3 0.1 0:00.01 top 1 root 20 0 1648 532 472 S 0.0 0.0 0:01.00 init 2 root 15 -5 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT -5 0 0 0 S 0.0 0.0 0:00.00 migration/0 4 root 15 -5 0 0 0 S 0.0 0.0 0:01.09 ksoftirqd/0 5 root 15 -5 0 0 0 S 0.0 0.0 0:01.27 events/0 6 root 15 -5 0 0 0 S 0.0 0.0 0:00.00 khelper
Je vidět, že proces, který enormně zatěžuje procesor je beagled-helper
, a jeho PID
je 6978
. Ve sloupci NI
je uvedena priorita procesu.
Podobně jako příkaz renice
používá čísla od 19
(nejnižší priorita) do -19
(nejvyšší priorita). Průměrná priorita, obvyklá u uživatelských procesů (programů) je 0
. Proces beagle-helper
má hodnotu nice 19
, tedy nejnižší možnou.
V praxi to funguje tak, že procesy s vyšší prioritou dostanou při zpracování přednost. Můžete si všimnout, že ve chvíli, kdy váš program pracuje, vytížení procesoru se změní ve prospěch aktuálně využívaného programu. Proces beagle-helper
procesor uvolní pro upřednostněné procesy. Jakmile má procesor čas, věnuje ho i procesům s nízkou prioritou.
V tomto konkrétním případě by bylo nutné měnit ještě prioritu procesu beagled
, který celou indexaci řídí.
Použít na tento proces příkaz renice
za účelem uvolnění procesoru pro jiné programy nemá tedy smysl. Pokud ale potřebujete mít indexaci pro vyhledávání mít hotovou dříve, je možné jeho prioritu zvýšit (tedy číslo snížit). Je potřeba zmínit, že zvyšovat prioritu (snižovat číslo) může jen administrátor; uživatel může jen u svých procesů prioritu pouze snižovat (číslo zvyšovat). Nyní tedy zvýšíme prioritu procesu beagle-helper
na úroveň ostatních uživatelských procesů, tedy na nulu:
[root@localhost user]# renice 0 -p 6948 6948: původní priorita 19, nová priorita 0 [root@localhost user]#
Nyní beagle-helper
využívá procesor stejně jako většina ostatních uživatelských procesů. Opět výpis z programu top
:
Tasks: 125 total, 2 running, 123 sleeping, 0 stopped, 0 zombie Cpu(s): 4.0%us, 2.7%sy, 8.0%ni, 81.0%id, 4.3%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1556028k total, 1515824k used, 40204k free, 195236k buffers Swap: 3293244k total, 156k used, 3293088k free, 742524k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 6948 moje 20 0 81920 43m 10m S 9.3 2.8 57:03.50 beagled-helper 6720 moje 20 0 340m 133m 25m R 1.3 8.8 19:42.97 firefox-bin 6624 moje 20 0 21600 10m 8300 S 1.0 0.7 4:55.07 gkrellm 4318 root 20 0 195m 44m 6788 S 0.7 2.9 8:34.79 X 6767 moje 27 7 116m 74m 9196 S 0.7 4.9 62:52.88 beagled 6745 moje 20 0 115m 35m 21m S 0.3 2.3 0:10.80 thunderbird-bin 19125 root 20 0 2168 1012 784 R 0.3 0.1 0:00.71 top
Pokud chcete spouštěnému programu/procesu určit prioritu hned při spuštění, slouží k tomu příkaz nice
. V něm se nezadává konečná hodnota priority jako u příkazu renice
, ale k aktuální hodnotě se v parametru -n
přičítá zde uvedené číslo. Tedy nice -n 2 nazev_spustitelneho_souboru
přičte k aktuálnímu číslu priority dvojku, tedy sníží prioritu o dva stupně. Pokud je číslo s mínusovým znaménkem, dochází ke zvyšování priority (snižování čísla).
Další informace viz přeložené manuálové a info stránky zde