Veškerá moc příkazové řádky/příkazového řádku přehledně, pro začátečníky i pokročilé
24. Správa procesů
Vývoj vanilkové příchuti Linuxu: Knihy kouzel byl 1. března 2025
ukončen. Tento text je zachován jako historický, ale chyby již nejsou
opravovány. Odnože projektu pod kompatibilní licencí jsou vítány.
Tato kapitola pokrývá vyhledávání, zkoumání, sledování a ukončování procesů
a omezeně také jejich spouštění. Rovněž se zabývá sledováním, jak jednotlivé procesy
využívají systémové zdroje jako výkon procesoru, paměť RAM či pevný disk.
Ne všechny uvedené postupy však fungují pro zacházení s démony;
hodláte-li zacházet s démony, navštivte kapitolu Systém.
Když v linuxu spustíte program, vznikne tzv. proces – jakási „schránka“ pro program,
která mu umožňuje běžet na procesoru a využívat systémové zdroje.
Většina příkazů, které v terminálu zadáte, vytvoří nový proces.
Pouze malá část spuštěných procesů si otevře také grafické uživatelské rozhraní.
Procesy jsou v linuxu identifikovány čísly PID (což neznamená „Pražská integrovaná doprava“)
a jsou uspořádány do „rodinné“ struktury, kde každý proces s výjimkou
dvou prvotních démonů má právě jednoho rodiče. PID rodiče je u vlastního procesu uvedeno
jako vlastnost „PPID“. (Pozor – nepleťte si PID a PPID!)
Proces je instance počítačového programu v paměti, v dané chvíli jednoznačně identifikovaná kladným celým číslem PID (obvykle v rozsahu 1 až 4 194 304). PID procesu se za jeho běhu nemůže změnit; může se však změnit PPID (pokud je rodič pohřben dřív než zrozenec) nebo to, který program v rámci daného procesu ve skutečnosti běží.
Démon je systémový proces bez uživatelského rozhraní, konkrétně jsou to dva prvotní démoni („systemd“ – PID 1 a „kthreadd“ – PID 2) a ti jejich přímí potomci, kteří nemají textové ani grafické uživatelské rozhraní. Prvotní démoni jako procesy nemají rodiče, jsou zřízeni přímo jádrem a jejich PPID je 0.
Zombie je proces, který skončil, ale jeho rodič dosud nepřevzal jeho návratovou hodnotu. Převzetím návratové hodnoty rodičem je zombie pohřbena a její PID se uvolní pro přidělení dalšímu procesu.
Název procesu je textový identifikátor přiřazený procesu jádrem. Není jednoznačný a vzniká (asi) tak, že se z ARGV[0] vezme jen název souboru (bez cesty) a zkrátí se na prvních 15 bajtů (obsahuje-li vícebajtové znaky, může dojít ke vzniku neplatné sekvence).
Úloha bashe je proces spuštěný z bashe, který byl spuštěn na pozadí nebo alespoň jednou na pozadí odsunut. Takový proces dostane od dané instance bashe vedle PID ještě druhý identifikátor – „číslo úlohy“. Číslo úlohy je pak pro daný proces jedinečné, ale pouze v rámci dané instance bashe.
Z nalezených procesů vybrat: jen nejstarší proces/jen nejnovější proces/všechny procesy, které nevyhovují kritériím. (Výchozí: všechny procesy vyhovující kritériím.) Poznámka: staří procesu se zde posuzuje podle času spuštění.
☐ -f
Regulární výraz testovat proti celé příkazové řádce procesu. (Normálně jen proti názvu procesu.)
☐ -d řetězec
Nastavit oddělovač výpisu nalezených PID.
○ -c ○ -l ○ -a
Vypsat: jen počet nalezených PID; PID a název procesu; PID a příkazový řádek procesu.
☐ -i
Při testu regulárního výrazu nerozlišovat velká a malá písmena.
Kritéria:
☐ -G gid-nebo-skupina...
Vybrat podle skupiny (RGID).
☐ -P PPID...
Vybrat podle PPID.
☐ -t terminál...
Vybrat podle příslušného terminálu (např. „pts/1“).
Většina uvedených příkazů je základními součástmi Ubuntu.
Pouze některé konkrétní příkazy ve stejnojmenných balíčcích je potřeba doinstalovat,
pokud je chcete použít:
kvóty, kontejnery, izolační a virtualizační techniky jako chroot, lxc či cgroups
1 Pro procesy zřízené jádrem (systemd a kthreadd) vrací „0“.
2 Nepříluší-li proces žádnému terminálu ani konzoli, vypíše „?“.
3 Každý záznam začíná názvem proměnné prostředí a znakem „=“, za ním následuje obsah proměnné.
4 Funguje především na notebooku, nemám příliš vyzkoušené.
5 Jde o vestavěnou konstrukci bashe, která dovoluje na místo jednoduchého příkazu zadat také více příkazů spojených rourou, např. „time seq 10000 | wc -l“. Účinek příkazu „time“ se pak vztahuje na všechny procesy spojené rourou.
6 Priorita je číslo v rozsahu -20 (nejvyšší) až 19 (nejnižší); normální priorita je 0. Obyčejný uživatel (tzn. bez sudo) může pouze snižovat prioritu vlastních procesů.
7 Návratovým kódem příkazu „wait“ bude návratový kód úlohy odpovídající poslednímu uvedenému PID. Tento příkaz bude fungovat i v případě, že dané úlohy již skončily, ale pouze jednou — nelze ho volat vícekrát pro tutéž úlohu.
8 Byla-li úloha pozastavená, tento příkaz ji nechá pokračovat.
9 Procesy realizující samotný skript se nevypíšou, proto můžete při opakovaném volání dostat stejný výsledek.