next up previous contents
Next: Sygnały pod SVR4, BSD Up: Przenoszenie aplikacji do Linuxa Previous: Wstęp   Contents

Obsługa sygnałów

Przez lata, defninicja i składnia sygnałów była modyfikowana na różne sposoby przez różne implementacje Unixa. Obecnie, istnieją dwie główne klasy symboli: niepewny (unreliable) i pewny (reliable). Niepewne sygnały to te, dla których obsługa sygnału nie pozostaje po tym jak został wywołany. Te 'jednorazowe' sygnały muszą zainstalować ponownie obsługę sygnału wewnątrz tejże obsługi, pod warunkiem, że program chce aby obsługa sygnału pozostała zainstalowana. W związku z tym, mamy sytuację wyścigu, w którym sygnał może przybyć przed obsługą sygnału, co może spowodować utratę sygnału lub wykonanie oryginalnej obsługi ( np. takiej jak zabicie procesu ). Dlatego sygnały te są niepewne, gdyż operacje wychwytywania sygnału i prze-instalowywania obsługi nie są automatyczne.

Podczas działania sygnałów niepewnych wywołania systemowe nie są restartowane automatycznie kiedy zostaną przerwane przez sygnał. Zatem, aby przygotować program na wszelkie wypadki należy sprawdzać wartość errno po każdym wywołaniu systemowym oraz jeżeli wartością jest EINTR należy ponowić wywołanie systemowe. Budowa niepewnych sygnałów nie daje nam żadnego prostego sposobu na atomową pauzę operacji ( uśpienie procesu do czasu pojawienia się sygnału ). Z powodu niepewnej natury reinstalacji sygnałów zachodzą wypadki, w których sygnał przybywa bez realizacji przez program. Podczas działania sygnałów pewnych obsługa sygnału pozostaje zainstalowana po wywołaniu, przez to sytuacja wyścigu zostaje ominięta. Do tego, wywołania systemowe mogą być restartowane i atomowa pauza działania jest dostępna poprzez funkcję POSIX sigsuspend.




next up previous contents
Next: Sygnały pod SVR4, BSD Up: Przenoszenie aplikacji do Linuxa Previous: Wstęp   Contents

2000-03-01


Poltronic