abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 16:44 | Nová verze

    Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.18. Díky 174 přispěvatelům.

    Ladislav Hagara | Komentářů: 2
    včera 15:11 | IT novinky

    Miliardy korun na digitalizaci služeb státu nestačily. Stát do ní v letech 2020 až 2024 vložil víc než 50 miliard korun, ale původní cíl se nepodařilo splnit. Od loňského února měly být služby státu plně digitalizované a občané měli mít právo komunikovat se státem digitálně. Do tohoto data se povedlo plně digitalizovat 18 procent agendových služeb státu. Dnes to uvedl Nejvyšší kontrolní úřad (NKÚ) v souhrnné zprávě o stavu digitalizace v Česku. Zpráva vychází z výsledků víc než 50 kontrol, které NKÚ v posledních pěti letech v tomto oboru uskutečnil.

    Ladislav Hagara | Komentářů: 8
    včera 13:55 | IT novinky

    Nadace Wikimedia, která je provozovatelem internetové encyklopedie Wikipedia, oznámila u příležitosti 25. výročí vzniku encyklopedie nové licenční dohody s firmami vyvíjejícími umělou inteligenci (AI). Mezi partnery encyklopedie tak nově patří Microsoft, Amazon a Meta Platforms, ale také start-up Perplexity a francouzská společnost Mistral AI. Wikimedia má podobnou dohodu od roku 2022 také se společností Google ze skupiny

    … více »
    Ladislav Hagara | Komentářů: 0
    včera 02:22 | Nová verze

    D7VK byl vydán ve verzi 1.2. Jedná se o fork DXVK implementující překlad volání Direct3D 5, 6 a 7 na Vulkan. DXVK zvládá Direct3D 8, 9, 10 a 11.

    Ladislav Hagara | Komentářů: 0
    včera 02:00 | Nová verze

    Byla vydána verze 12.0.0 knihovny libvirt (Wikipedie) zastřešující různé virtualizační technologie a vytvářející jednotné rozhraní pro správu virtuálních strojů. Současně byl ve verzi 12.0.0 vydán související modul pro Python libvirt-python. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    15.1. 19:22 | Humor

    CreepyLink.com je nový zkracovač URL adres, 'díky kterému budou vaše odkazy vypadat tak podezřele, jak je to jen možné'. Například odkaz na abclinuxu.cz tento zkracovač převádí do podoby 'https://netflix.web-safe.link/logger_8oIlgs_free_money.php'. Dle prohlášení autora je CreepyLink alternativou ke zkracovači ShadyURL (repozitář na githubu), který dnes již bohužel není v provozu.

    NUKE GAZA! 🎆 | Komentářů: 3
    15.1. 12:33 | IT novinky

    Na blogu Raspberry Pi byla představena rozšiřující deska Raspberry Pi AI HAT+ 2 s akcelerátorem Hailo-10 a 8 GB RAM. Na rozdíl od předchozí Raspberry Pi AI HAT+ podporuje generativní AI. Cena desky je 130 dolarů.

    Ladislav Hagara | Komentářů: 3
    15.1. 12:11 | Komunita

    Wikipedie slaví 25. výročí svého založení. Vznikla 15. ledna 2001 jako doplňkový projekt k dnes již neexistující encyklopedii Nupedia. Doména wikipedia.org byla zaregistrována 12. ledna 2001. Zítra proběhne v Praze Večer svobodné kultury, který pořádá spolek Wikimedia ČR.

    Ladislav Hagara | Komentářů: 1
    15.1. 04:44 | Nová verze

    Po více než dvou letech od vydání předchozí verze 2.12 byla vydána nová stabilní verze 2.14 systémového zavaděče GNU GRUB (GRand Unified Bootloader, Wikipedie). Přehled novinek v souboru NEWS a v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 2
    15.1. 02:22 | Nová verze

    Google Chrome 144 byl prohlášen za stabilní. Nejnovější stabilní verze 144.0.7559.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 10 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře (YouTube).

    Ladislav Hagara | Komentářů: 4
    Které desktopové prostředí na Linuxu používáte?
     (14%)
     (5%)
     (0%)
     (9%)
     (19%)
     (3%)
     (6%)
     (3%)
     (11%)
     (42%)
    Celkem 463 hlasů
     Komentářů: 12, poslední 14.1. 21:12
    Rozcestník

    Dotaz: wait - cekani na všechny procesy

    25.4.2012 16:44 Petr
    wait - cekani na všechny procesy
    Přečteno: 464×
    Dobrý den, prosím vás, mám program(napsaný v C), kde pomocí dvou cyklů vytvářím celkem 10 podřízených procesů (každý cyklus 5). Jak správně napsat funkci wait a kam ji umístit, aby hlavní proces(ten z kterého se vytváří těch 10 dalších) počkal na dokončení všech podřízených procesů a pak pokračoval dál.

    Tedy, aby hlavní proces vytvořil podřízené procesy, počkal až provedou co mají a pak pokračoval dál.

    Děkuji za každou radu.

    Řešení dotazu:


    Odpovědi

    25.4.2012 19:24 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: wait - cekani na všechny procesy
    Že by za druhý cyklus?
    25.4.2012 19:28 rastos | skóre: 63 | blog: rastos
    Rozbalit Rozbalit vše Re: wait - cekani na všechny procesy
    No ... teda ... osobnú skúsenosť nemám, ale waitpid() môže čakať na any child process whose process group ID is equal to that of the calling process. Takže ak by každý child process mal to isté process group ID - napr. zhodné s parent PID - čo sa dá tuším dá dosiahnuť tak, že child zavolá setpgid(0,getppid()) a parent zavolá setpgid(0,0) - tak by malo stačiť zavolať waitpid(0,&status,0).

    Daj vedieť, či to zafunguje.
    mess avatar 25.4.2012 23:27 mess | skóre: 43 | blog: bordel | Háj ve Slezsku - Smolkov
    Rozbalit Rozbalit vše Re: wait - cekani na všechny procesy
    Tak z fork() vyleze PID potomka. Takže by mělo stačit si ty PID někde poznačit a pak volat normálně wait(pid) na každý ten PID. Tím se zajistí, že se bude pokračovat, až všchni potomci vychcípou.
    Cez párne mesiace zošíváš vaginy, cez neparne montuješ hajzle.
    26.4.2012 21:03 Petr
    Rozbalit Rozbalit vše Re: wait - cekani na všechny procesy
    Takže si např. ukládat PID všech potomků do pole a potom mít cyklus, kde v každé iteraci bude funkce wait() čekat na ukončení dalšího potomka. Může to takhle fungovat?

    Nebudu problém v tom, že potomci nebudou ukončování v tom pořadí, v kterém byli vytvořeni. Např. vytvořím pět procesů, v hlavním procesu bude cyklus, který bude postupně čekat na ukončení potomků(čeká na 1. na 2. ...čeká na 5.), ale potomci budou ukončení v pořadí např. 3. 1. 2. 5. 4..

    Děkuji za odpověď.
    26.4.2012 21:13 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: wait - cekani na všechny procesy

    A priori to problém není, protože stejně nechcete pokračovat dál, dokud neskončí všichni, a zpoždění dané tím, že pak ještě několikrát zavoláte waitpid() na potomky, kteří už dávno skončili, je zanedbatelné. Na druhou stranu, při téhle metodě vám v systému mohou poměrně dlouho (v závislosti na tom, s jakými odstupy potomci končí) viset zombie, což nepatří k dobrým mravům.

    Osobně bych to řešil spíš tak, že budu v cyklu volat waitpid(-1, …), dokud neskončí všichni potomci. Pokud chcete být opatrný, můžete si potomky "odškrtávat" (udržovat příznak, kdo už skončil), jinak stačí evidovat počet dosud běžících (a čekat, až klesne na nulu).

    V každém případě je ale potřeba dávat pozor na to, že to, že návratová hodnota waitpid() je PID potomka, ještě automaticky neznamená, že potomek opravdu skončil (je potřeba kontrolovat status).

    xkucf03 avatar 27.4.2012 13:54 xkucf03 | skóre: 50 | blog: xkucf03
    Rozbalit Rozbalit vše Re: wait - cekani na všechny procesy
    a zpoždění dané tím, že pak ještě několikrát zavoláte waitpid() na potomky, kteří už dávno skončili, je zanedbatelné.
    A nemůže se stát, že by některý z mých procesů skončil a mezitím se v systému objevil jiný (cizí) se stejným číslem a já pak čekal na něj, což nechci?
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    xkucf03 avatar 27.4.2012 13:57 xkucf03 | skóre: 50 | blog: xkucf03
    Rozbalit Rozbalit vše Re: wait - cekani na všechny procesy
    Aha, tak ne :-)
    All of these system calls are used to wait for state changes in a child of the calling process
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    mess avatar 27.4.2012 15:33 mess | skóre: 43 | blog: bordel | Háj ve Slezsku - Smolkov
    Rozbalit Rozbalit vše Re: wait - cekani na všechny procesy
    Navíc, dokud nezavoláš wait/waitpid na toho potomka, co chcípnul, tak bude v systému viset jako zombie, takže další proces se stejným PID by se objevit neměl.
    Cez párne mesiace zošíváš vaginy, cez neparne montuješ hajzle.
    27.4.2012 18:14 Petr
    Rozbalit Rozbalit vše Re: wait - cekani na všechny procesy
    Takže, pro 5 vytvořených procesů by mělo fungovat něco jako:

    for(j = 0; j < 5; j++) { waitpid(-1, NULL, 0); }

    Hlavní proces bude čekat, než se ukončí 5 procesů a pak si povalí dál. Vypadá, že to funguje. Co si o tom myslíte?
    27.4.2012 18:39 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: wait - cekani na všechny procesy
    Přečtěte si pozorně poslední odstavec mého předchozího příspěvku. Vy ovšem jdete ještě dál a návratovou hodnotu nekontrolujete vůbec, takže nereagujete správně ani na přerušení signálem nebo jinou chybu.
    27.4.2012 19:09 Petr
    Rozbalit Rozbalit vše Re: wait - cekani na všechny procesy
    Začínám se do toho zamotávat. Mohl by mi někdo napsat, jak správně by ten cyklus měl vypadat, aby počkal na všechny potomky a kontroloval návratovou hodnotu wait() ?
    mess avatar 27.4.2012 21:59 mess | skóre: 43 | blog: bordel | Háj ve Slezsku - Smolkov
    Rozbalit Rozbalit vše Re: wait - cekani na všechny procesy
    Chlape, snaž se trochu. Jako první bych se podíval na manuálové stránky funkce waitpid. Ten cyklus máš +- dobře, jen potřebuješ ošetřit, abys při přerušení signálem neposkočil o 1 dál. Pochybuju, že ti tady někdo napíše přesně, jak to má vypadat. Vypadá to, jako bys chtěl, aby za tebe tady někdo dělal domácí úkol.
    Cez párne mesiace zošíváš vaginy, cez neparne montuješ hajzle.
    26.4.2012 21:48 camel1cz | skóre: 25
    Rozbalit Rozbalit vše Re: wait - cekani na všechny procesy
    DD,

    stačilo trochu zagooglit - řešilo se to na netu, třeba zde

    Obzvlášť se mi líbí ta varianta (jasně, je to bez testů vyjímečných stavů, pádů childů atd.):
    while(wait() > 0) { /* no-op */ ; }
    

    Založit nové vláknoNahoru

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

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.