Úvod
Keď väčšina z nás používa počítače, spúšťame rôzne aplikácie. Tieto aplikácie sú spúšťané programami nazývanými servery alebo operačné systémy. Existuje mnoho rôznych druhov serverov, ktoré fungujú rôznymi spôsobmi. Jedným z nich je Linux. Linux spúšťa aplikácie vo forme procesov.
V Linuxe označujeme každú aplikáciu ako „proces“. Server je schopný spravovať nízkoúrovňový aspekt životného cyklu procesu. Ako používateľ možno budete musieť komunikovať so serverom, aby ste mohli manipulovať s niektorými aspektmi na vyššej úrovni. S OS môžete komunikovať a spravovať ho pomocou rôznych nástrojov. Existuje mnoho príkazov, ktoré môžete použiť na úpravu rôznych aspektov a funkcií servera. Tu je jednoduchý návod, ako jednoducho nastaviť server založený na Linuxe na Ubuntu. Ďalej sa môžete naučiť, ako nainštalovať LAMP Stack (Linux, Apache, MySQL, PHP).
Táto príručka sa zameriava na to, ako môžete použiť ps, kill a nice na správu procesov v Linuxe.
Zobrazenie spustených procesov v Linuxe
- top
Na začiatok, jedným z najzákladnejších príkazov, ktoré by ste mali poznať, je top. Tento nástroj vám pomôže vizualizovať, ktoré procesy momentálne bežia v systéme. Tu je znázornené, ako to bude vyzerať, keď ho spustíte:
|
1 |
top |

V hornej časti výsledku môžete nájsť systémové štatistiky. To vám poskytuje informácie o veciach, ako je zaťaženie systému a počet úloh. V tomto príklade môžete zistiť, že existuje jeden spustený proces a 55 nečinných procesov. Nečinné alebo spiace procesy sú tie, ktoré momentálne nepoužívate. To znamená, že neobsadzujú systémové prostriedky. Nakoniec môžete vidieť všetky spustené procesy v dolnej časti vyskakovacieho okna so štatistikami využitia.
- htop
Pred použitím tohto príkazu ho budete musieť nainštalovať z repozitárov zadaním a spustením nasledujúceho:
|
1 |
sudo apt-get install htop |
Keď ho budete mať, môžete ho použiť na zobrazenie podobných informácií ako pri príkaze top. Hlavný rozdiel je v tom, že s príkazom htop získate používateľsky prívetivejší výsledok:
|
1 |
htop |

Ako môžete vidieť, tento výsledok je ľahko pochopiteľný a interpretovateľný.
Použitie ps na výpis procesov
Hoci na zobrazenie spustených procesov môžete použiť vyššie uvedené príkazy, nemusia vždy pokrývať všetky scenáre. Našťastie máme k dispozícii silnejší a flexibilnejší nástroj. Ide o príkaz ps.
Pozrime sa, čo uvidíte, ak spustíte príkaz tak, ako je:
|
1 |
ps |

V tomto výstupe môžete vidieť všetky procesy, ktoré bežia v súvislosti s aktuálnym používateľom a reláciou. To vám však neposkytne veľa informácií.
Ak chcete komplexnejší pohľad na všetky procesy bežiace v systéme, musíte použiť argument. Argument vám umožňuje vidieť všetky procesy, ktoré vlastnia všetci používatelia, bez ohľadu na priradenie k terminálu. Výstup sa tiež zobrazuje vo veľmi používateľsky prívetivom a ľahko čitateľnom formáte. Tu je príklad:
|
1 |
ps aux |

Na druhej strane môžete tieto informácie vizualizovať aj v stromovom formáte. Tu, ako uvidíte, sa prejavia aj hierarchické vzťahy:
|
1 |
ps axjf |

V tomto príklade môžete vidieť, ako sa kthreadd zobrazuje ako rodič následne nasledujúcich procesov.
- Čo sú ID procesov?
Ako používateľ Linuxu alebo Unixu by ste mali vedieť o ID procesov. Tieto jedinečné identifikátory, známe aj ako PID, priraďuje každému procesu systém. Pomocou týchto identifikátorov server sleduje každý jednotlivý proces. Ak chcete zistiť PID daného procesu, musíte použiť príkaz pgrep, napríklad takto:
|
1 |
pgrep bash |
|
1 2 |
Výstup: 1340 |
Pri spúšťaní systému začne bežať prvý proces. Tento proces sa nazýva init. Ako predvolený mechanizmus získa proces init PID „1“. PID tohto procesu môžete skontrolovať nasledovne:
|
1 |
pgrep init |
|
1 2 |
Výstup: 1 |
Proces init má potom na starosti spustenie všetkých ostatných programov alebo procesov. Je pochopiteľné, že nasledujúce procesy budú mať zvyšujúce sa alebo väčšie PID.
- Čo sú rodičovské procesy?
Ďalším konceptom, ktorý je potrebné poznať, je rodičovský proces. Ak proces A vytvorí proces B, potom proces A je rodičovským procesom procesu B. Na uľahčenie ich rozlíšenia systém priraďuje rodičovským procesom PPID. Tento PPID si môžete všimnúť v hlavičkách stĺpcov vždy, keď spustíte akýkoľvek príkaz na správu, ako napríklad top, htop a ps.
- Čo sú to vzťahy rodič-potomok?
Ako už vieme, rodičovské procesy vytvárajú dcérske procesy. Toto vytvorenie prebieha v dvoch krokoch. Prvým je fork(). Ten začína vytvorením nového adresného priestoru. Taktiež kopíruje prostriedky rodiča pomocou copy-on-write, aby boli dostupné aj pre dcérsky proces. Druhým je exec(). Ten je zodpovedný za načítanie a spustenie spustiteľného súboru v novovytvorenom adresnom priestore.
- Čo ak dcérsky proces zomrie skôr ako rodičovský proces?
V prípade, že sa tak stane, dcérsky proces sa stane zombie procesom. To platí dovtedy, kým o ňom rodičovský proces nezhromaždí nejaké informácie alebo neoznámi jadru, že pridružené informácie nepotrebuje. Keď sa tak stane, prostriedky, ktoré proces využíval, sa uvoľnia.
- Čo ak rodičovský proces zomrie skôr ako dcérsky proces?
V tomto scenári systém priradí dcérsky proces inému rodičovskému procesu. Môže to byť init alebo akýkoľvek iný proces.
Odosielanie signálov procesom v Linuxe
Odoslaním signálu môžete prinútiť daný proces, aby vám odpovedal. Signály vám pomáhajú komunikovať s operačným systémom. Signál môžete použiť na ukončenie, spustenie alebo úpravu správania či úlohy danej aplikácie.
- Použitie PID na odosielanie signálov
Jedným z nástrojov, ktoré môžete použiť na odosielanie signálov v Linuxe, je kill. Tento príkaz, ako napovedá jeho názov, vám pomáha ukončiť alebo zabiť proces:
|
1 |
kill PIDoftarget_process |
Tento nástroj odošle procesu signál TERM, ktorý mu prikáže ukončiť proces. Príkaz prinúti aplikáciu vykonať vyčistenie a bez problémov skončiť. V prípade, že sa program po signáli TERM neukončí hladko, môžete prejsť priamo k obídeniu pomocou signálu KILL:
|
1 |
kill -KILL PIDoftarget_process |
Tento signál nesmeruje do programu. Smeruje do jadra operačného systému. Jadro proces priamo ukončí. Môžete to použiť, keď program ignoruje signály, ktoré mu posielate.
V tomto príkaze môžete tiež nahradiť názov signálu číslom, ktoré je s ním spojené. Napríklad namiesto „-TERM“ môžete použiť „-15“. Podobne môžete nahradiť „-KILL“ za „-9“.
- Použitie signálov na rôzne účely
Signály môžete použiť aj na iné veci okrem zabíjania alebo ukončovania programov. Napríklad jedným z problémov, ktoré môžete riešiť, je reštartovanie démonov. Vždy, keď démon dostane signál zavesenia (hang up) alebo HUP, reštartuje sa v programoch ako Apache. Na prepísanie tohto správania môžete použiť nasledujúci signál:
|
1 |
sudo kill -HUP pidofapache |
Tento príkaz prinúti Apache znova načítať svoju konfiguráciu. V dôsledku toho vám bude naďalej poskytovať príslušný obsah.
Ak chcete vidieť, aké signály môžete poslať pomocou nástroja kill, použite nasledujúci príkaz:
|
1 |
kill -l |

- Odosielanie signálov podľa názvu
Tradične by ste signál posielali pomocou PID programu. Máte však možnosť posielať signály pomocou bežného názvu procesu. Na tento účel môžete použiť príkaz pkill. Funguje podobne ako príkaz pkill. Jediným rozdielom je, že vám umožňuje použiť názov procesu:
|
1 |
pkill -9 ping |
Tento príkaz pkill je ekvivalentom nasledujúceho príkazu kill:
|
1 |
kill -9 `pgrep ping` |
Máte k dispozícii aj príkaz pre prípad, keď chcete poslať signál každej inštancii namiesto konkrétneho procesu. Nasledujúci príkaz odošle signál TERM všetkým inštanciám prehliadača Firefox spusteným v systéme:
|
1 |
killall firefox |
Úprava priorít procesov
Ďalšou vecou, ktorú môžete robiť s príkazmi Linuxu, je upravovať priority. To znamená, že sa môžete rozhodnúť, ktorý proces má vo vašom serverovom prostredí prioritu. Môžu existovať určité procesy, ktoré považujete za kritické. Iné nemusia byť až také potrebné. Systém vykoná tie druhé programy až vtedy, keď zostanú nejaké voľné zdroje.
Prioritu procesov v Linuxe môžete ovládať pomocou príkazu niceness. Táto hodnota označuje úlohy s vysokou prioritou ako menej milé (less nice) a procesy s nízkou prioritou ako viac milé (more nice). Predstavte si to takto: procesy s vysokou prioritou sú menej milé, pretože hromadia zdroje. Úlohy s nízkou prioritou ich zdieľajú, takže sú milšie.
Hodnotu nice daného procesu môžete vidieť po spustení príkazu top. Táto hodnota sa nachádza v stĺpci „NI“. Úlohy s vysokou prioritou by mali hodnoty nice v rozsahu od „-19/-20“. Procesy s nízkou prioritou sa pohybujú v rozsahu od „19/20“. Uvidíte niečo takéto:
|
1 |
top |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Úlohy: 56 celkovo, 1 bežiace, 55 spiace, 0 zastavené, 0 zombie Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Pamäť: 1019600k celkovo, 324496k použité, 695104k voľné, 8512k buffery Swap: 0k celkovo, 0k použité, 0k voľné, 264812k v medzipamäti PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1635 root 20 0 17300 1200 920 R 0.3 0.1 0:00.01 top 1 root 20 0 24188 2120 1300 S 0.0 0.2 0:00.56 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.11 ksoftirqd/0 |
Ak chcete spustiť proces s osobne priradenou hodnotou nice, stačí použiť príkaz nice:
|
1 |
nice -n 15 prikaznaspustenie |
Tento príkaz bude fungovať iba vtedy, keď spúšťate daný program. Ak chcete zmeniť hodnotu nice programu, ktorý už beží, musíte použiť renice:
|
1 |
renice 0 PIDnaprioritizaciu |
Záver
Ako môžete vidieť, tieto nástroje sú dosť odlišné od tých grafických. V dôsledku toho môžu byť pre začiatočníka ťažko pochopiteľné. Tento návod vám pomôže oboznámiť sa s týmito príkazmi. Viac praxe vám pomôže lepšie sa ich naučiť a používať ich efektívnejšie.
Pozrite si naše ďalšie zdroje, ktoré vám môžu pomôcť lepšie spravovať vaše servery Linux, vrátane návodov na ako nakonfigurovať server Linux na používanie autentifikácie založenej na kľúčoch SSH, vyhľadávanie súborov v systéme Linux VPS pomocou príkazov whereis, which, whatis, readlink a find, a čítanie a nastavovanie premenných prostredia a shellu na Linux VPS.
Príjemnú prácu s počítačom!
Komentáre
Zatiaľ žiadne komentáre. Buďte prvý.