Portál AbcLinuxu, 4. května 2025 04:34

Co se to spouští?

7.11.2006 20:46 | Přečteno: 1536× | Ze života | Výběrový blog

V rámci průběžného testování systému incron mám na počítači trvale spuštěn démon incrond. Tabulka obsahuje pravidla, která monitorují přístup k souborům v adresářích /bin, /sbin, /usr/bin a /usr/sbin. Je zajímavé pozorovat, jaké programy se bezděčně spouští.

Unixovská filosofie, jak známo, říká, že by mělo být mnoho malých jednoúčelových programů. A realita v GNU/Linuxu skutečně vypadá tak, že si mnohé větší aplikace spouští pro své účely spoustu malých prográmků. Je to opravdu správná cesta?

Většinou se v takových případech objevují stále tytéž nástroje. Podívejme se, které programy patří k těm notoricky spouštěným:

Podobně často se spouští ještě řada dalších programů. Například u programu file to naprosto chápu - jeho význam je nezpochybnitelný (a nelze ho v podstatě nijak nahradit). Ale čemu nerozumím, je spouštění takových programů, které mají buď své obdoby ve formě knihovních funkcí (např. zmíněný gunzip, iconv apod.), nebo dokonce funkcí ve standardní knihovně GNU C (rm, mktemp a mnohé další). Zvláštní kapitolou jsou programy, které spouští (nebo otvírají ke čtení) samy sebe - některé jen několikrát (např. OpenOffice.org, KEdit), ale některé i mnohokrát (KWrite někdy i víc než 40x).

Nemohu si neklást otázku, proč to tvůrci různých programů (např. man, Midnight Commander, Mozilla, Cinelerra a mnohých jiných) vlastně dělají. Jaké výhody přináší to, že se místo zavolání knihovní funkce spouští samostatný program? Rozumím tomu, když taková funkce neexistuje - pak není nic jednoduššího, než si spustit potřebný program. Chápu také případy, že je třeba knihovna pod licencí nekompatibilní s příslušným programem. Ale ve výše uvedených případech se o nic takového nejedná.

Je důležité o tomto začít hovořit, a to hlavně kvůli problematice výkonu/rychlosti. Spuštění malého prográmku je sice záležitost maximálně stovek milisekund. Jenže to jsou leckdy právě ta malá zpoždění, která dokáží uživatele pořádně otrávit a ten pak říká, jak je ten Linux pomalý. Proto si myslím, že je na čase přezkoumat často používané programy a odstranit z nich spouštění utilit ve všech případech, kdy je takové řešení zbytečné a lze nahradit prostým voláním funkcí. Odměnou za toto nepříliš velké úsilí by bylo celkové zrychlení systému a eliminace části stížností na nízký výkon (které jsou v tomto případě zcela oprávněné).

       

Hodnocení: 92 %

        špatnédobré        

Anketa

Co si myslíte o spouštění malých jednoúčelových nástrojů z větších aplikací?
 (8 %)
 (8 %)
 (75 %)
 (5 %)
 (5 %)
Celkem 80 hlasů

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

David Watzke avatar 7.11.2006 20:52 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Co se to spouští?
Odpovědět | Sbalit | Link | Blokovat | Admin
file má obdobu ve formě funkce, nebo ne (libmagic)?
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Luk avatar 7.11.2006 21:03 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Co se to spouští?
Asi ano. Jen si nejsem jistý, jestli file nedělá o něco víc než jen analýzu podle souboru magic.
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
David Watzke avatar 7.11.2006 21:14 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Co se to spouští?
To asi ne, Googlem jsem našel: "file is now split (thanks to upstream changes) into libmagic and file (as a tiny wrapper executable around the library)"
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Luk avatar 7.11.2006 21:45 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Co se to spouští?
Pak by bylo skutečně lepší používat knihovnu (libmagic) i v tomto případě.
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
8.11.2006 11:59 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Co se to spouští?
knižnice používať v prípade, že daná funkcionalita je nevyhnutná pre správnu funkčnosť programu.

Príklad: web-browser. Môže fungovať aj bez prítomnosti napr gunzip či libz.

Hranica či áno alebo nie, tá je iná ako 1/0.

Luk avatar 8.11.2006 14:10 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Co se to spouští?
Samozřejmě nelze spouštění programů zcela zatracovat, u málo využívaných funkcionalit (bez kterých se aplikace obejde) je to v pořádku.

Ale zrovna ZLIB (libz) je příklad toho, kde je zbytečné něco spouštět externě. Je krajně nepravděpodobné, že by v systému byly konzolové utility, ale nebyla tam příslušná sdílená knihovna.

Navíc (k té robustnosti) - při kompilaci lze zjistit, jaké knihovny jsou k dispozici, a když nejsou, tak se příslušná funkcionalita prostě nezakompiluje. A u binárních distribučních balíků se to dá zajistit pomocí závislostí.

Ale znovu opakuji - jde mi hlavně o ty věci, které jsou ve standardních knihovnách (zejména když jsou POSIX-kompatibilní) a jsou tedy k dispozici všude.
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
7.11.2006 21:19 Kníže Ignor | skóre: 19 | blog: stoupa
Rozbalit Rozbalit vše Re: Co se to spouští?
Odpovědět | Sbalit | Link | Blokovat | Admin
This program is the "inotify cron" system. It consist of a daemon and a table manipulator. You can use it a similar way as the regular cron. The difference is that the inotify cron handles filesystem events rather than time periods.
LOL. Bezvadně zvolené jméno :-D
Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
Luk avatar 7.11.2006 21:42 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Co se to spouští?
Dobré jitro! :-D Pokud jsi trochu sledoval můj blog, tak víš, že na začátku bylo tohle. Takže to jméno jsem v podstatě nevymýšlel, vzniklo jaksi samo.
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
7.11.2006 21:57 Kníže Ignor | skóre: 19 | blog: stoupa
Rozbalit Rozbalit vše Re: Co se to spouští?
Dobré jitro!
Přesně to jsem měl namysli.

Ostatně nejdůležitější je, že jste s ním spokojen vy :-)
Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
Luk avatar 7.11.2006 22:33 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Co se to spouští?
Vzhledem k tomu, že se nejedná o program pro BFU, je tento název velice logický. Asi stejně, jako je logický sám název inotify ;-)
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
7.11.2006 23:12 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: Co se to spouští?
Odpovědět | Sbalit | Link | Blokovat | Admin
Rozhodně by se měly vždycky používat knihovní funkce. Pokud neexistují, pak je to chyba návrhu. Přijde mi jako pěkná zhůvěřilost pouštět kvůli nějaké elementární činnosti jiný program a nedej bože pak ještě parsovat jeho výstup.
Ještě na tom nejsem tak špatně, abych četl Viewegha.
wake avatar 7.11.2006 23:58 wake | skóre: 30 | blog: wake | Praha
Rozbalit Rozbalit vše Re: Co se to spouští?
Odpovědět | Sbalit | Link | Blokovat | Admin
no, zrovna u OOo jde o normalni multithreading, afaik.
Tento příspěvek má hlavičku i patičku!
Luk avatar 8.11.2006 01:03 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Co se to spouští?
To je možné, nezkoumal jsem to, beru to jenom podle toho, co se zaznamenalo do logu. Ale těch zhruba 41-45 spuštění/otevření (nelze rozlišit) kwrite je mi pořádnou záhadou. Tím spíš, že se to stane jen někdy.
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
8.11.2006 17:43 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
Rozbalit Rozbalit vše Re: Co se to spouští?
btw. jake pouzivate jadro a knihovnu pro praci s vlakny? pod linuxthreads by se kazde vlakno opravdu mohlo hlasit jako spusteni sebe sama...

btw. kdyz aplikace spousti sebe sama tak to nebude zase tak hruza, protoze uz jednou v pameti je takze vetsina veci se nebude nacitat a bude bezet v rezimu copyonwrite.
Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
Luk avatar 8.11.2006 18:59 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Co se to spouští?
No, protože používám FC 4-6, je to samozřejmě NPTL (a už hezky dlouho). On někdo dnes ještě používá LinuxThreads? ;-)
kdyz aplikace spousti sebe sama tak to nebude zase tak hruza, protoze uz jednou v pameti je takze vetsina veci se nebude nacitat a bude bezet v rezimu copyonwrite.
To sice ano, ale mě to zajímá čistě z principu, proč se tak děje.
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
9.11.2006 12:23 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
Rozbalit Rozbalit vše Re: Co se to spouští?
ale jiste, stabilni debiani a ze jich je! ted delam jeden projekt, ktery hrube vyuziva vlakna a multiprocessing a kdyz jsem to hodil na test na server se sargem nastacil jsem se divit, jak hrube dokaze propadnout vykon diky linuxthreads. ale za mesic dva tu bude stabilni etch (nebo windows vista ;-]) , takze aj tito mohykani skonci....
Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
8.11.2006 01:17 cynik
Rozbalit Rozbalit vše Re: Co se to spouští?
Odpovědět | Sbalit | Link | Blokovat | Admin
Ja se jim vubec nedivim, delam to taky:

*) Pri prekladu daneho programu nemusim mit 150 dalsich knihoven prilinkovanych kvuli jedne funkci, nehlede na to, ze funkce mohou byt v ruznych knihovnach, mit jine parametry atd.

*) Vetsina programku typu rm neni jen obalem nejakeho unlinku, ale umi spoustu veci navic, kterych se da sikovne vyuzit a opet jsou vice nezavisle na prostredi kde se spousti.

*) Navic se tak dosahuje velke robustnosti jednak pri chybach a jednak kdyz nevyhovuje standardni utilitka, napiseme si vlastni a dame ji do cesty aby se hledala driv.

Zkoumal jsem efektivitu tohoto zpusobu volani a rozhodne se na rychlosti nebo pameti projevi jen opravdu malo.. pokud tedy jde o externi programy psane v prekladanem jazyku.
8.11.2006 01:29 thingie
Rozbalit Rozbalit vše Re: Co se to spouští?
První problém lze obejít tím, že si tu knihovnu nahraju programově. Třetí důvod je celkem to samé jako LD_PRELOAD. No, nevím, nepřijde mi volání externích programů jako nějaké velké zlo. Pokud vůbec.
xvasek avatar 8.11.2006 09:05 xvasek | skóre: 21 | blog: | Zlín
Rozbalit Rozbalit vše Re: Co se to spouští?
Moje řeč. Přidal bych, že voláním externího programu je umožněno míchat 32 a 64 bit kód, možná to jde formulovat i obecněji.

Navíc UNIX byl takto stavěný od začátku a IMHO kvůli této "skládačkovitosti" přežil dodnes. Pokud bych chtěl něco optimalizovat na rychlost, tak má smysl používat knihovní funkce, ale jinak ne. Teď jsem třeba dělal v Perlu nějaký import, který probíhá někde v noci a potřeboval jsem pro string data (datumu) v ISO formátu funkci "o den později". Sáhnul jsem po date a je mi úplně šumák, že se volá v průběhu importu asi 1500krát.
8.11.2006 12:04 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Co se to spouští?
Hint:
use Class::Date qw(date);

my $o_den_pozdeji = date ('2006-11-08 12:03:00') + '1D';

print $o_den_pozdeji, "\n";
xvasek avatar 8.11.2006 23:19 xvasek | skóre: 21 | blog: | Zlín
Rozbalit Rozbalit vše Re: Co se to spouští?
Dík, za tip. Každopádně my $o_den_pozdeji=`date -I -d $date +1 day` je o jeden řádek a půl hodiny hledání knihovny kratší. :-)
Jakub Hájek avatar 8.11.2006 23:19 Jakub Hájek | skóre: 14 | blog: zamek | Praha
Rozbalit Rozbalit vše Re: Co se to spouští?
Odpovědět | Sbalit | Link | Blokovat | Admin
Když už se to zde řeší, mohu se zeptat jakým způsobem lze ten externí program zavolat například v C? Dík.
Teprve tehdy, až nebudeme mít co ztratit, budeme opravdu svobodní.
Luk avatar 9.11.2006 00:24 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Co se to spouští?
Jsou v zásadě dvě možnosti:
  1. system()
  2. fork + exec* (execve(), execvp(), execle()...)
První způsob je jednodušší - program se spouští přes shell, stačí předat celou příkazovou řádku jako při interaktivním spouštění. Nevýhodou je jednak právě (zbytečné) spouštění shellu, dále zablokování procesu/vlákna do skončení podřízeného procesu, nemožnost rozumné komunikace s procesem atd.

Druhý způsob je složitější. Prostě se "forkne" (duplikuje) proces a pak se (v potomkovi) zavolá některá z funkcí pro spuštění programu. Původní proces běží dál, může buď čekat na skončení potomka (wait(), waitpid() apod.) nebo zatím něco dělat a občas se podívat, jestli potomek neskončil (příp. reagovat na signál SIGCLD). S podřízeným procesem lze komunikovat přes roury nebo jiným způsobem.
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
.. avatar 9.11.2006 01:07 .. | skóre: 4 | blog:
Rozbalit Rozbalit vše Re: Co se to spouští?
Lehce poopravim pro ty co by si to chteli hledat: SIGCHLD
Luk avatar 9.11.2006 09:17 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Co se to spouští?
Ano, moje chyba, častější (a podle POSIXu) je SIGCHLD, ale SIGCLD lze použít též.
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
Jakub Hájek avatar 9.11.2006 10:57 Jakub Hájek | skóre: 14 | blog: zamek | Praha
Rozbalit Rozbalit vše Re: Co se to spouští?
Díky, už čtu many těch funkcí. Myslím, že už se konečně pustím do patche pro SIM, aby mi nastavoval away messages pomocí fortunky :-)
Teprve tehdy, až nebudeme mít co ztratit, budeme opravdu svobodní.
Josef Kufner avatar 9.11.2006 20:35 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Co se to spouští?
3. popen()

Je to ještě hezčí hračka, když je potřeba přečíst výstup nějakého programu (nebo mu něco předhodit).
Hello world ! Segmentation fault (core dumped)
Luk avatar 9.11.2006 22:16 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Co se to spouští?
No jo, na ten jsem úplně zapomněl. Je někde uprostřed mezi prvním a druhým přístupem (snadná komunikace přes rouru a současně jednodušší práce než přes fork a exec).
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.