13.6.2012

Odeslat odpověď

Smajlíci
:D :) :( :o :shock: :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode je zapnutý
[img] je zapnutý
[flash] je vypnutý
[url] je zapnuté
Smajlíci jsou zapnutí

Přehled tématu
   

Rozšířit náhled Přehled tématu: 13.6.2012

13.6.2012

od LordG » 13. 6. 2012 20:40

Zadání:
Vytvořit skript, který vypíše strom hierarchické závislosti procesů. Závislost = rodič-potomek, identifikátorem je PPID z výpisu ps.

Parametry:
formát výpisu - nepovinný, seznam ps sloupců, které mají být vypsány
podmínky - normálně, co parametr, to podmínka, ve tvaru SLOUPEC=HODNOTA nebo SLOUPEC~REGEXP

Příklad vstupu:
./skript.sh PID=11.*

Příklad ps
PID PPID COMMAND
1 0 init
1 335 bash
1123 335 ps
1124 335 more
502 335 man

Odpovídající výstup (například):
PID PPID COMMAND
+ 1 0 init
+-+ 1 335 bash
| +-+ 335 1124 ps
| +-+ 335 1124 more

Tedy rozbor:
1) načtení parametrů
zkontroluju, jestli první parametr je seznam sloupců pro ps (pozná se tak, že NEobsahuje = ani ~)

zbytek pošlu jako proměnnou do AWK

ps a -o "PPID,PID,$SLOUPCE" | tr -s ' ' | awk (..viz níže..); komentář: v ps potřebuju PPID a PID při zpracování vždy a není jistota, že je tam uživatel zadal. Navíc je třeba ošetřit (což jsem neudělal, a ani bych to nestihnul, že pokud existuje PODMÍNKA na nějaký sloupec, který ale není $SLOUPEC, je nutné si ho do ps přidat)
2) AWK
-- oddělovač sloupců MEZERA
a) zpracování řádek
tři pole:
první obsahuje prostě seznam PID a je indexované 1 .. N. Možná by nebylo třeba, ale aspoň mně to usnadnilo práci

druhé obsahuje řádky ps bez prvních dvou sloupců

třetí obsahuje vazby PID => PPID, tedy klíč je PID, hodnota PPID

navíc vyšetřím podmínky (pří zpracovávání první řádky namapuji název sloupce na číslo) a označím si nějakým prefixem vyhovující řádky

b) vytvoření stromu
pro každý klíč najdu přes třetí pole rodiče, a jedu dokud nějaký rodič je, tedy se od uzlu či listu dostanu ke kořeni

seřadím bubblesortem, abych už měl stromovou strukturu v pořádku

c) označení vhodných položek stromu
pokud nejsou žádné omezující podmínky na hodnoty sloupců, prostě označím vše. Jinak pro každou označenou řádku označím ji i všechny rodiče až po kořen.

d) výpis
pořádně jsem nedodělal.. prostě "nějak" :))

Snad to někomu pomůže, asi tam nemám vše..

Nahoru