Et signal i operativsystemer i Unix-familien er en asynkron notifikation af en proces om en hændelse, en af de vigtigste måder at interagere mellem processer på . Når et signal sendes til en proces, afbryder operativsystemet udførelsen af processen, og hvis processen har installeret sin egen signalbehandler , starter operativsystemet denne håndtering og videregiver information om signalet til den, hvis processen ikke har installeret en handler, så udføres standardhandleren.
Signalnavne "SIG..." er numeriske konstanter ( C makro definitioner ) med værdier defineret i header-filen . De numeriske værdier af signalerne kan variere fra system til system, selvom de fleste af dem har samme værdier i forskellige systemer. Kill -værktøjet giver dig mulighed for at angive et signal som et tal eller symbol. signal.h
Signalspecifikationen er inkluderet i POSIX -standarderne .
Der sendes signaler:
Signaler kan ikke sendes til en afsluttet proces, der er i zombietilstand .
Standardbehandleren for de fleste signaler afslutter processen. Til alternativ håndtering af alle signaler undtagen SIGKILL og SIGSTOP kan en proces tildele sin egen handler eller ignorere deres forekomst ved at ændre sin signalmaske . Den eneste undtagelse er en proces med pid 1 ( init ), som har ret til at ignorere eller behandle eventuelle signaler, inklusive KILL og STOP.
En proces (eller shell-bruger) med et ægte UID andet end 0 ( superbrugers UID ) kan kun sende signaler til processer med det samme rigtige UID.
POSIX definerer 28 signaler, der kan klassificeres som følger:
Navn | Koden | Standardhandling | Beskrivelse | Type |
---|---|---|---|---|
SIGABRT | 6 | Afslut med et hukommelsesdump | Signalet sendt af funktionenabort() | Styring |
SIGALRM | fjorten | Færdiggørelse | Signal for udløbet af den indstillede tidalarm() | Notifikation |
SIGBUS | ti | Afslut med et hukommelsesdump | Misbrug af fysisk hukommelse | Undtagelse |
SIGCHLD | atten | Ignoreret | Børneproces afsluttet eller stoppet | Notifikation |
SIGCONT | 25 | Fortsæt udførelsen | Genoptag en tidligere stoppet proces | Styring |
SIGFPE | otte | Afslut med et hukommelsesdump | Fejlagtig aritmetisk operation | Undtagelse |
SIGHUP | en | Færdiggørelse | Terminal lukning | Notifikation |
SIGILL | fire | Afslut med et hukommelsesdump | Ugyldig processorinstruktion | Undtagelse |
SIGINT | 2 | Færdiggørelse | Afbryd signal (Ctrl-C) fra terminal | Styring |
SIGKILL | 9 | Færdiggørelse | Ubetinget opsigelse | Styring |
SIGPIPE | 13 | Færdiggørelse | Skriv til brudt forbindelse (rør, fatning) | Notifikation |
SIGQUIT | 3 | Afslut med et hukommelsesdump | "Afslut" signal fra terminal (Ctrl-\) | Styring |
SIGSEGV | elleve | Afslut med et hukommelsesdump | Hukommelsesadgangsforstyrrelse | Undtagelse |
SIGSTOP | 23 | Stopper en proces | Stopper en proces | Styring |
SIGTERM | femten | Færdiggørelse | Afslutningssignal (standardsignal for kill-værktøjet) | Styring |
SIGTSTP | tyve | Stopper en proces | Stop signal fra terminal (Ctrl-Z). | Styring |
SIGTTIN | 26 | Stopper en proces | Forsøg på at læse fra terminal ved baggrundsproces | Styring |
SIGTTOU | 27 | Stopper en proces | Forsøg at skrive til terminalen ved hjælp af en baggrundsproces | Styring |
SIGUSR1 | 16 | Færdiggørelse | Brugersignal #1 | Brugerdefinerede |
SIGUSR2 | 17 | Færdiggørelse | Brugersignal #2 | Brugerdefinerede |
SIGPOLL | 22 | Færdiggørelse | Hændelsen sporespoll() | Notifikation |
SIGPROF | 29 | Færdiggørelse | Profileringstimerens udløb | Fejlretning |
SIGSYS | 12 | Afslut med et hukommelsesdump | Forkert systemopkald | Undtagelse |
SIGTRAP | 5 | Afslut med et hukommelsesdump | Sporfælde eller brudpunkt | Fejlretning |
SIGURG | 21 | Ignoreret | Hastedata modtaget på socket | Notifikation |
SIGVTALRM | 28 | Færdiggørelse | Udløb af den "virtuelle timer" | Notifikation |
SIGXCPU | tredive | Afslut med et hukommelsesdump | Processen har overskredet CPU-tidsgrænsen | Undtagelse |
SIGXFSZ | 31 | Afslut med et hukommelsesdump | Processen har overskredet den tilladte filstørrelse | Undtagelse |
Der er også signaler, der ikke er defineret i POSIX, men til stede på nogle operativsystemer.
Ved håndtering af undtagelser og fejlfindingssignaler kan en proces skrive en fil med et proceshukommelsesdump ( kernebillede ) til den aktuelle mappe før terminering , hvorved fejlfinderen kan gendanne betingelserne, hvorunder denne undtagelse opstod. Nogle gange (for eksempel for programmer, der kører som root), oprettes et hukommelsesdump af sikkerhedsmæssige årsager.
Normalt tager en signalhandler kun ét argument, signalnummeret (dette giver dig mulighed for at bruge den samme handlerfunktion til flere signaler). sigaction()Hvis du angiver SA_SIGINFO-indstillingen, når du indstiller signalbehandleren (ved hjælp af funktionen ), vil yderligere to argumenter blive videregivet til behandleren:
De fleste ekstra koder er specifikke for hvert signal. Koder, der er fælles for alle signaler:
Koden | Beskrivelse |
---|---|
SI_USER | Signal sendt af funktion kill()(eller hjælpeprogram kill) |
SI_QUEUE | Signal sendt af funktionsigqueue() |
SI_TIMER | Signalet sendes efter den tid, der er indstillet af funktionentimer_settime() |
SI_ASYNCIO | Signal sendt efter afslutning af en "asynkron I/O"-anmodning |
SI_MESGQ | Signal sendt, når en besked vises i en tom "Unix-meddelelseskø" |
Inter-proces kommunikation | |
---|---|
Metoder | |
Udvalgte protokoller og standarder |