Odchyceni signalu
Cejka Rudolf
cejkar na dcse.fee.vutbr.cz
Pondělí Říjen 2 19:40:30 CEST 2000
Petr Novotny <Petr.Novotny na antek.cz> wrote:
> Byl byste tak hodny a tuto myslenku dale rozvedl? Cemu rikate
Kdybych mel vice zbytecneho casu, tak zajiste ano. Krome verejnych
konferenci ale existuji treba i skoleni a vyuka na skolach.
> "neni prenositelna"? On signal(2) je i na pre-POSIX systemech, na
> nichz sigaction(2) jeste neni.
> Jestli myslite trivialni komplikaci s tim, ze SysV-ish signal(2) je
> jednorazove nastaveni, ktere se vyvolanim handleru prenastavi na
> puvodni, zatimco BSD-ish signal(2) nastaveni handleru uchovava,
To je prilis zjednoduseny pohled. Semantika rozhrani signal()
se menila dokonce i v ramci jednotlivych vetvi.
> pak to je *skutecne* trivialni komplikace - tu vydavat za prekazku
> prenositelnosti je *velmi* odvazne.
Pro nekoho trivialita, pro jineho neprekonatelny problem. Krome
obnovovani/neobnovovani obsluhy je tu i blokovani/neblokovani
shodneho signalu po dobu obsluhy a preruseni s EINTR/restart
blokujiciho systemoveho volani, snahy o srovnani mezisystemove
semantiky, tj. bsd_signal() a siginterrupt() a kdo vi co jeste.
Jeste si vzpominam treba na ruzne funkce pro blokovani signalu.
> Dobre, mate pravdu. Mel to byt jen jednoduchy priklad. :-) Opravit
> jej na write(1,"handling SIGPIPE") snad zvladne i dite :-)
Oprava by to byla jen v pripade pouziti rozhrani sigaction().
U signal() funkcnost zarucena neni, i kdyz se to treba v praxi
ponekud sporne pouziva.
> urcite. :-) Na jednoduchem odchyceni SIGPIPE v presne
> definovanych pripadech (tj. staram se o tom, zda me pajpy nejsou
> broken; kdyz je muj stdout broken, at se treba sesypu) neni zadna
> veda.
Ma-li program fungovat jen na 99,9 %, pak je to skutecne snadne.
Ma-li ale program fungovat na 100 % (a nemam ted na mysli problemy
se stdout), pak je problematika signalu mnohem slozitejsi nez prace
s vlakny - prave diky malo zrejmym skutecnostem. Dokazu si to zive
predstavit: Typ sig_atomic_t nikdo nezna, v obsluze se nastavuje
jednoducha promenna a v hlavnim programu se ta promenna testuje a meni
a urcite bude zase vsechno spatne.
--
Rudolf Cejka (cejkar na dcse.fee.vutbr.cz; http://www.fee.vutbr.cz/~cejkar)
Brno University of Technology, Faculty of El. Engineering and Comp. Science
Bozetechova 2, 612 66 Brno, Czech Republic
Další informace o konferenci Linux