signal(7)
signal(7)
Översikt över signaler
NAMN
signal - översikt över signaler
BESKRIVNING
Linux stödjer både POSIX-reliabla signaler (hädanefter "standardsignaler") och POSIX realtidssignaler.
Signaldestinationer
Varje signal har en nuvarande destination, som avgör hur processen beter sig när signalen levereras.
Tabellen nedan visar de möjliga standarddestinationerna för varje signal:
- Term - Standardåtgärden är att avsluta processen.
- Ign - Standardåtgärden är att ignorera signalen.
- Core - Standardåtgärden är att avsluta processen och generera en kärndump.
- Stop - Standardåtgärden är att stoppa processen.
- Cont - Standardåtgärden är att fortsätta processen om den för närvarande är stoppad.
En process kan ändra destinationen för en signal med hjälp av sigaction(2) eller signal(2).
Genom att använda dessa systemanrop kan en process välja en av följande åtgärder för levererade signaler:
- Utföra standardåtgärden.
- Ignorera signalen.
- Fånga signalen med en signalhanterare, en programmerardefinierad funktion som körs automatiskt när signalen levereras.
Standarddestinationen för signalhanteraren körs på processens normala stack. Alternativt kan signalhanteraren använda en alternativ stack; se sigaltstack(2).
En signalhantering är en processattribut, vilket innebär att i en multitrådad applikation delar alla trådar samma signalhantering.
Barnprocesser skapade med fork(2) ärver förälderns signalhanteringar. Under en execve(2) återställs hanterade signaler till standard, medan ignorerade signaler förblir oförändrade.
Skicka en signal
Följande anrop kan användas för att skicka signaler:
- raise(3) - Skickar en signal till den anropande tråden.
- kill(2) - Skickar en signal till en specifik process eller processgrupp.
- pidfd_send_signal(2) - Skickar en signal till en process via en PID-filbeskrivare.
- pthread_kill(3) - Skickar en signal till en specifik POSIX-tråd.
- sigqueue(3) - Skickar en realtidsignal med bifogade data till en specifik process.
Vänta på att en signal fångas
Följande systemanrop pausar trådens körning tills en signal fångas:
- pause(2) - Pausar tills en signal fångas.
- sigsuspend(2) - Temporärt ändrar signalmasken och pausar tills en oskyddad signal fångas.
Synkron hantering av signaler
Signaler kan hanteras synkront med följande metoder:
- sigwaitinfo(2) och sigtimedwait(2) - Blockerar tills en signal levereras och returnerar information om signalen.
- signalfd(2) - Läser signalinformation via en filbeskrivare.
Signalblockering och köade signaler
En signal kan blockeras, vilket innebär att den inte levereras förrän den avblockeras. Signaler som är genererade men ännu inte levererade kallas "väntande signaler".
Varje tråd har en oberoende signalmask, som kan ändras med pthread_sigmask(3) i multitrådade applikationer. I en entrådad applikation kan sigprocmask(2) användas för att manipulera signalmasken.
Utförande av signalhanterare
När en signalhanterare aktiveras: 1. Signalen tas bort från de väntande signalerna. 2. Om `SA_ONSTACK` används, byter tråden till en alternativ signalstack. 3. Signalrelaterad kontext sparas, inklusive:
* Programräknarens position (nästa instruktion som ska köras när signalhanteraren avslutas). * Trådens aktuella signalmask. * Konfiguration av trådens alternativa signalstack.
4. Körningen överförs till signalhanteraren. 5. När signalhanteraren returnerar, återställer sigreturn(2) trådens tillstånd till det som gällde innan signalen fångades.
STANDARDSIGNALER
Linux stödjer följande standardsignaler. Tabellen visar standardåtgärden för varje signal och om den är definierad av POSIX:
Signal | Standard | Åtgärd | Kommentar | ||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
SIGABRT | POSIX | Core | Abortsignal från abort(3) | SIGALRM | POSIX | Term | Timersignal från alarm(2) | SIGBUS | POSIX | Core | Minnesfel | SIGCHLD | POSIX | Ign | Barnprocess stoppad eller avslutad | SIGCONT | POSIX | Cont | Fortsätt om stoppad | SIGFPE | POSIX | Core | Flyttalsfel | SIGILL | POSIX | Core | Otillåten instruktion | SIGINT | POSIX | Term | Avbrott från tangentbord | SIGKILL | POSIX | Term | Döda process (kan inte fångas) | SIGPIPE | POSIX | Term | Skriva till trasig rörledning | SIGSEGV | POSIX | Core | Ogiltig minnesreferens | SIGTERM | POSIX | Term | Avslutningssignal | SIGUSR1 | POSIX | Term | Användardefinierad signal 1 | SIGUSR2 | POSIX | Term | Användardefinierad signal 2 |
Signaler som SIGKILL och SIGSTOP kan inte fångas, blockeras eller ignoreras.
REALTIDSSIGNALER
Linux stödjer realtidssignaler, som har följande egenskaper:
- Realtidssignaler har inga fördefinierade betydelser.
- Realtidssignaler kan köas, till skillnad från standardsignaler.
- Realtidssignaler levereras i den ordning de genereras.
Realtidssignaler används för applikationsspecifika ändamål. Program bör alltid referera till realtidssignaler som `SIGRTMIN+n` och kontrollera att `SIGRTMIN+n` inte överskrider `SIGRTMAX`.
SYSTEMANROP OCH BIBLIOTEKSFUNKTIONER
Om en signal fångas medan ett systemanrop eller en biblioteksfunktion är blockerad kan anropet:
- Startas om automatiskt efter att signalhanteraren returnerar.
- Avbrytas och returnera felet `EINTR`.
Vilket som händer beror på om signalhanteraren skapades med flaggan `SA_RESTART`. För detaljer, se sigaction(2).
STANDARDER
Signalhantering följer POSIX.1.
NOTER
Se signal-safety(7) för en diskussion om säkra funktioner vid signalhantering.
BUGGAR
Signaler som SIGBUS och SIGSEGV kan levereras olika beroende på CPU-arkitektur.
SE ÄVEN
COLOPHON
Denna manual är en del av Linux manualprojektet. För att rapportera buggar, kontakta ⟨man-pages@man7.org⟩.
Sidslut
Orginalhemsidan på Engelska :https://man7.org/linux/man-pages/man7/signal.7.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.