next up previous contents
Next: D.3 Cevi Up: D Komunikacija med procesi Previous: D.1 Nadzor procesov Vsebina: contents

D.2 Signali

Posiljanje sporocil s signali je nacin obdelave asinhronih dogodkov. Ti signali so misljeni kot prekinitve programa, ki dobi sporocilo in se mora odzvati na nacin, ki je predpisan. Sporocila programu lahko pridejo od uporabnika, ki npr. pritisne doloceno tipko ali da ukaz za generiranje signala; lahko pa je to tudi sporocilo od drugega programa, ki komunicira s prvim. Signalov je vec vrst, so poimenovani in imajo predpisan nacin, kako se program odziva na dolocen signal. Privzeto odzivanje programa na signal lahko spremenimo s funkcijo signal(). Uporabnik lahko nastavi tri nacine odzivanja na signal:

  1. Ignoriranje signala je mozno za vse signale razen SIGKILL in SIGSTOP, ki sta predvidena za brezpogojno koncanje in zaustavljanje programa. Tako ukaz
       signal(SIGQUIT, SIG_IGN);
    
    ignorira ukaze za koncanje (quit)
  2. Z ukazom kot je
       signal(SIGQUIT, SIG_DFL);
    
    pa nastavimo predvideno (default) odzivanje na signal
  3. Uporabnisko odzivanje na signal je mozno tako, da uporabnik poda funkcijo, ki se izvede ob prispetju ustreznega signala. Za kriticne signale, ki jih uporabnik prestreza, se najveckrat zahteva tudi koncanje programa, s tem, da ima uporabnik tu se dodatno moznost, da resi cim vec dela v programu, izpise obvestilo o kriticnem signalu in podobne informacije. Poleg predpisanih tipov signalov, sta tu se dva signala, namenjena samo uporabniku in jih sistem ne generira sam ampak le uporabnik ali pripadajoci programi.

Posiljanje signalov med procesi je izvedeno s funkcijama kill() in raise(). Funkcija raise lahko posilja signale le istemu procesu, medtem ko kill zmore posiljati tudi drugim procesom. Cakanje na signal je izvedeno s pause(). Mozna je tudi nastavitev za avtomatsko generiranje signala s funkcijo alarm(unsigned int seconds), kar uporabno za kontrolo delovanja programa s t.i. watch-dog timer-jem, kjer nastavimo najvecji cas, ki ga lahko kaksna operacija opravlja. Tipicna opravila so to razna branja iz enot, kjer nastavimo t.i. timeout, po katerem prekinemo nadaljnje branje zaradi nedelovanja enote.

Na novejsih sistemih obstajajo tudi funcije za nadzor skupine signalov, kjer lahko nastavimo cakanje, zacasno ustavitev signalov in verizenje akcij (hooks) za signale.



Copyright © 1995 Leon Kos, Univerza v Ljubljani