Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avMartin Hedlund
1
Jonny Karlsson 27.9.2005 PROCESSPROGRAMMERING Föreläsning 5 (27.9.2005) Innehåll: -Signaler -Signalhantering
2
Jonny Karlsson 27.9.2005 Signaler Signaler är kommunikation utan informationsöverföring, inom en process, eller mellan olika processer. Används för processavbrott, dvs. det normala förloppet hos en process kan avbrytas av en signal. Interna signalerSkapas av en exekverande process t.ex: - felaktig instruktion - skrivning av information i en rörledning vars läsända är stängd Externa signalerSkapas t.ex. från: - tangentbordet, t.ex. ctrl-c - Från andra processer systemanropet kill - Från UNIX kommondoraden med kommandot kill En signal identifieras i unix m.h.a. en signalnummer (positivt heltal)
3
Jonny Karlsson 27.9.2005 Signaler STANDARDISERADE SIGNALER I UNIX (Mer info i föreläsningskompendiet och boken) 1.SIGHUP 2.SIGINTTerminal avbrott. Genereras vanligen med ctrl-c 3.SIGQUIT 4.SIGILLGenereras av ogiltig maskininstruktion 5.SIGTRAP 6.SIGIOT 7.SIGEMT 8.SIGFPE 9.SIGKILLGenereras bl.a. av kill -9 processnummer 10.SIGBUS 11.SIGSEGV 12.SIGSYS 13.SIGPIPEGenereras om en process försöker skriva i en rörledning med stängd läsända 14.SIGALRMGenereras av systemanropet alarm(seconds) efter önskat antal sek. 15.SIGTERMGenereras av UNIX kommandot kill processnummer
4
Jonny Karlsson 27.9.2005 Signalhantering UPPFÅNGNING AV SIGNALER ”signal catching” Varje signal i UNIX har en standard funktion som utförs då signalen genereras En signal kan fångas upp och trigga en egen programmerad funktion eller ignoreras genom med systemanropet signal() #include typedef void (*sighandler_t) (int); sighandler_t signal(int signum, sighandler_t handler) signumNumret på en signal som man vill uppfånga handerPekare på en void funktion som skall triggas då signalen uppfångas ReturnerarVärdet för den förra ”signal handlern” eller SIG_ERR vid misslyckande. Ex1
5
Jonny Karlsson 27.9.2005 Signalhantering En signal kan ignoreras i en process med: signal(signalnummer, SIG_IGN); Man kan återställa grundinställningen för en signal med: signal(signalnummer, SIG_DFL); Alla signaler förtom SIGKILL kan göras uppfångbara med systemanropet signal() Ex. 2
6
Jonny Karlsson 27.9.2005 Signalhantering Systemanropet pause() kan användas om man vill att en process skall lämna och vänta på en viss signal: #include int pause(void); Ex. 3
7
Jonny Karlsson 27.9.2005 Signalhantering ATT SÄNDA EN SIGNAL FRÅN EN PROCESS TILL EN ANNAN Kan i C-programmet göras med systemanropet kill() #include int kill (pid_t pid, int signummer); pidprocessnummer för den process som skall ta emot signalen signummersignalnumret som skall skickas till den andra processen Returnerar0 vid framgång -1 vid misslyckande Ex. 4
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.