Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za duben (YouTube). Na Linuxu je vedle Qt frontendu nově k dispozici také GTK4 / libadwaita frontend.
Neziskové průmyslové konsorcium Khronos Group vydalo verzi 3.1 specifikace OpenCL (Open Computing Language). OpenCL je průmyslový standard pro paralelní programování heterogenních počítačových systémů.
Homebridge pro integraci chytrých domácích zařízení byl vydán ve verzi 2.0.0. Nově vedle protokolu HomeKit Accessory Protocol (HAP) podporuje standard chytré domácnosti Matter.
Omarchy je linuxová distribuce s dlaždicovým správcem oken Hyprland. Založena je na Arch Linuxu. Vydána byla v nové verzi 3.7.0 - The Gaming Edition. Z novinek lze vypíchnout příkaz omarchy a celou řadu herních možností.
CyberChef byl vydán v nové major verzi 11. Přehled novinek v Changelogu. CyberChef je webová aplikace pro analýzu dat a jejich kódování a dekódování, šifrování a dešifrování, kompresi a dekompresi, atd. Často je využívaná při kybernetických cvičeních a CTF (Capture the Flag).
Byla vydána nová verze 2.4.67 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 11 zranitelností.
Brush (Bo(u)rn(e) RUsty SHell) je v Rustu napsaný shell kompatibilní s Bash (Bourne Again SHell). Vydána byla verze 0.4.0.
Google zveřejnil seznam 1 141 projektů (vývojářů) od 184 organizací přijatých do letošního, již dvaadvacátého, Google Summer of Code. Přihlášeno bylo celkově 23 371 projektů od 15 245 vývojářů ze 131 zemí.
Na čem pracovali vývojáři GNOME a KDE Plasma minulý týden? Pravidelný přehled novinek v Týden v GNOME a Týden v KDE Plasma.
Open source počítačová hra na hrdiny NetHack (Wikipedie, GitHub) byla vydána v nové verzi 5.0.0. První verze této hry byla vydána v roce 1987.
Řešení dotazu:
setpgid(0,getppid()) a parent zavolá setpgid(0,0) - tak by malo stačiť zavolať waitpid(0,&status,0).
Daj vedieť, či to zafunguje.
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.
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).
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?
All of these system calls are used to wait for state changes in a child of the calling process
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?
while(wait() > 0) { /* no-op */ ; }
Tiskni
Sdílej: