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