signal(2)
signal(2)
Systemanrop Manual
NAMN
signal - ANSI C signalhantering
BIBLIOTEK
Standard C-biblioteket (libc, -lc)
SYNOPSIS
```c
- include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler); ```
BESKRIVNING
VARNING: Beteendet för `signal()` varierar mellan UNIX-versioner och har också varierat historiskt över olika versioner av Linux. Undvik att använda det: använd sigaction(2) istället. Se Portabilitet nedan.
`signal()` ställer in signaldestinationen för signalen `signum` till `handler`, som kan vara:
- `SIG_IGN` - Ignorera signalen.
- `SIG_DFL` - Återställ standardåtgärden för signalen (se signal(7)).
- Adressen till en programmerardefinierad funktion (en "signalhanterare").
Om signalen `signum` levereras till processen händer något av följande:
- Om destinationen är `SIG_IGN` ignoreras signalen.
- Om destinationen är `SIG_DFL` utförs standardåtgärden för signalen.
- Om destinationen är en funktion utförs signalhanteraren med argumentet `signum`. När signalhanteraren returnerar avblockeras signalen om den tidigare blockerades.
Signalerna `SIGKILL` och `SIGSTOP` kan inte fångas eller ignoreras.
RETURNERAT VÄRDE
`signal()` returnerar det tidigare värdet av signalhanteraren. Vid fel returneras `SIG_ERR` och `errno` sätts för att indikera felet.
FEL
- `EINVAL` - Ogiltig signal `signum`.
VERSIONER
Användningen av `sighandler_t` är en GNU-förlängning som aktiveras om `_GNU_SOURCE` är definierad. Utan denna typ måste deklarationen av `signal()` skrivas som:
```c void (*signal(int signum, void (*handler)(int)))(int); ```
Portabilitet
Den enda portabla användningen av `signal()` är att ställa in en signals destination till `SIG_DFL` eller `SIG_IGN`. Semantiken för att använda `signal()` för att etablera en signalhanterare varierar mellan system. Använd istället sigaction(2) för detta ändamål.
STANDARDER
C11, POSIX.1-2008.
HISTORIK
C89, POSIX.1-2001.
På de ursprungliga UNIX-systemen återställdes signalhanterarens destination till `SIG_DFL` efter att signalen levererats. Detta beteende var problematiskt eftersom signalen kunde levereras igen innan hanteraren kunde återetableras.
BSD förbättrade situationen genom att blockera signalen under signalhanterarens körning och återstarta avbrutna systemanrop (se signal(7)). I Linux använder `signal()` som standard BSD-semantik via ett omslagsanrop till sigaction(2).
NOTER
- Effekterna av `signal()` i en multitrådad process är ospecificerade.
- Att ignorera signaler som `SIGFPE`, `SIGILL` eller `SIGSEGV` som inte genererats av kill(2) eller raise(3) kan leda till odefinierat beteende.
- Se signal-safety(7) för en lista över funktioner som säkert kan anropas från en signalhanterare.
SE ÄVEN
- kill(1)
- alarm(2)
- kill(2)
- pause(2)
- sigaction(2)
- signalfd(2)
- sigpending(2)
- sigprocmask(2)
- sigsuspend(2)
- bsd_signal(3)
- killpg(3)
- raise(3)
- siginterrupt(3)
- sigqueue(3)
- sigsetops(3)
- sigvec(3)
- sysv_signal(3)
- signal(7)
COLOPHON
Denna manual är en del av Linux manualprojektet. Rapportera buggar till ⟨man-pages@man7.org⟩.
Sidslut
Orginalhemsidan på Engelska :https://man7.org/linux/man-pages/man2/signal.2.html
PHP
Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på
https://www.linux.se/kontaka-linux-se/
Tack till PC Service som har sponsrat Linux.se med webbhotell.