Zpracovani signalu procesem

Ing. Pavel PaJaSoft Janousek janousek na fonet.cz
Středa Září 18 17:25:32 CEST 2002


Dalibor Toman wrote:
> procesu, stava se, ze i v threadech jsou blokujici operace (recv()  a
> spol) preruseny (EINTR), pripadne thready zacnou vyvadet divne

	Predevsim, jakekoli blokovaci operace skonci s EINTR, zahadou pro mne v 
tuto chvili je, zda-li se tak stane pouze a jenom v jednom threadu (tedy 
v tom, ktery se bude venovat obslouzeni signalu) nebo vsech threadech, 
ktere dostanou CPU behem zpracovavani obsluhy signal handleru....

> Dotazy:
>  - je normalni ze zaslani signalu na pid hlavniho procesu ma vliv na
>    thready? Lze tomu nejak zabranit?

	IMHO ano, signaly byly staveny na akce per proces. Jejich implementace 
IMHO nevi naprosto nic o vlaknech a tedy jejich obsluhu provede 
nedefinovane prvni vlakno, ktere se dostane k CPU, rozhodnout o tom 
nemuzete.

!!! Pokud to co pisu neni pravda, rad bych se dozvedel neco noveho...:-)

>  - pokud v threadu signal prerusi recv() muze mit vliv na chovani
>    threadu pri vstupu do zamklych kritickych sekci (pthread_mutex)?
>   (pozn: problem s recv() neni problem vyresit pomoci
>   MSG_NOSIGNAL)

	IMHO muze - pokud vezmu, ze pres recv - tedy blokujici operaci - 
provadim treba nejakou signalizaci (vzdalene mi to pripomina automaticky 
resetovane udalosti ve Win32), pak kdyz obsluhuji signal, ve skutecnosti 
uz v te kriticke sekci nejsem, IMHO jsem totiz presne za ni, protoze:

a) proces/vlakno obdrzi od jadra (?) a knihoven ret. kod EINTR
b) proces/vlakno se venuje obsluze signalu

	a tedy neni duvod proc jiny zablkovany vlakno by nemohlo do teto 
kriticke sekce vstoupit.

>  - co muzu a co nesmim v obsluze odchyceneho signalu? (zapisuju do
>    message logu syslogem)

	Co muzete ve smeru k vlaknum nevim, resp. neodvazuji si to popisovat, 
protoze a) pisi zasadne spise 'forkove' systemy, b) mohl bych si 
vymyslet, protoze bych vychazel z teoretickych zakladu a nikoli 
konkretni prakticke implementace jak knihovny pthread, kterou zrejme 
pouzivate, tak implementace v jadre (navenek se totiz jednotlive thready 
tvari jako jednotlive procesy, ne vzdy je to vyhodne).

PS: Signaly sice jsou brany jako jeden z IPC prostredku, ovsem doba 
jejich vzniku (a ted mam na mysli predevsim tzv. 'bezpecne' signaly, ne 
jeji predchozi implementace (oznacovana jako nespolehlive signaly)) s 
necim jako thready nepocitala. Rovnez je to podobne jako s vyjimkamy v 
Jave a C++ - daji se pouzit ruzne, ale ne vsechny pouziti jsou vhodna. 
Signal je specialni a hlavne malo se vyskytujici udalost (i kdyz mohu 
napr. SIGALRM generovat kazdou sekundu:-) - jako casovac nekdy docela 
dobry...), ktera by mela byt systemove obslouzena. Silne doporucuji se v 
  uzivatelskych aplikacich komunikaci pres signaly, pokud je to mozne, 
vyhnout a radeji sahnout po jinem IPC prostredku - napr. Message Queue a 
Semaforech.

	Tak mne jeste napada - nastaveni handleru provadi ve Vasem pripade 
ktery tok? - hlavni pred vytvarenim vlaken nebo jedno konkretni vlakno? 
Doufam, ze se nemylim, ale tyto 'systemove' tabulky sdili cely proces, 
resp. vsechny virtualni lokace jsou smerovany na jednu fyzickou.

-----------------------------------------------------------------------
Ing. Pavel Janousek (PaJaSoft)                 FoNet, spol. s r. o.
Vyvoj software, Intranet / Internet          Sokolova 67, 619 00 Brno
E-mail: mailto:Janousek na FoNet.Cz             Tel.: +420  5  4324 4749
SMS:    mailto:P.Janousek na SMS.Paegas.Cz      Fax.: +420  5  4324 4751
WWW:    http://WWW.FoNet.Cz/               E-mail: mailto:Info na FoNet.Cz
-----------------------------------------------------------------------



Další informace o konferenci Linux