Souběh při fork()

Martin `MJ' Mares mj na ucw.cz
Pondělí Červenec 28 12:17:11 CEST 2008


Hello, world!\n

> Otázka s předběhnutím konce potomka před návratem z forku rodiče
> a vyvoláním handleru na SIGCHLD v nevhodnou dobu se řeší pomocí
> maskování signálů. Před voláním fork zamaskujte doručení SIGCHLD
> procesu, forkněte a pak si jej opět povolte (v potomku i rodiči).
> Máte jistotu, že SIGCHLD v rodiči se doručí až po nastavení proměnné
> pid v tom pid=fork(). Viz sigprocmask().

Ošetřovat skončení potomka už v signal handleru bych spíše nedoporučoval,
mnohem lepší je jen si někam poznamenat, že se má v hlavní smyčce potomstvo
zkontrolovat. Jinak si zaděláváte na spoustu problému s konsistencí
datových struktur, do kterých sahá jak hlavní program, tak signal
handlery, a také s tím, že mnohé knihovní funkce není bezpečné ze signal
handleru volat.

				Have a nice fortnight
-- 
Martin `MJ' Mares                          <mj na ucw.cz>   http://mj.ucw.cz/
Faculty of Math and Physics, Charles University, Prague, Czech Rep., Earth
Sic transit gloria Monday!



Další informace o konferenci Linux