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