Linux unterstützt sowohl zuverlässige POSIX-Signale (im Folgenden "Standardsignale") als auch POSIX-Echtzeitsignale.
Standardsignale
Linux unterstützt die unten aufgeführten Standardsignale. Mehrere Signalnummern sind architekturabhängig, wie in der Spalte "Wert" angegeben. (Wenn drei Werte angegeben werden, gilt der erste normalerweise für alpha und sparc, der mittlere für i386, ppc und sh und der letzte für mips.
A - zeigt an, dass auf der entsprechenden Architektur kein Signal vorhanden ist.)
Die Einträge in der Spalte "Aktion" der Tabelle legen die Standardaktion für das Signal wie folgt fest:
Begriff
Standardaktion ist das Beenden des Prozesses.
Ign
Die Standardaktion besteht darin, das Signal zu ignorieren.
Ader
Die Standardaktion ist das Beenden des Prozesses und des Speicherauszugs.
Halt
Standardaktion ist das Stoppen des Prozesses.
Zuerst die im ursprünglichen POSIX.1-Standard beschriebenen Signale.
Signal | Wert | Aktion | Kommentar |
oder Tod des Kontrollprozesses | |||
SIGINT | 2 | Begriff | Unterbrechen Sie von der Tastatur |
SIGQUIT | 3 | Ader | Beenden Sie die Tastatur |
SIGILL | 4 | Ader | Illegale Anweisung |
SIGABRT | 6 | Ader | Signal von abbrechen abbrechen (3) |
SIGFPE | 8 | Ader | Gleitkomma-Ausnahme |
Sigkill | 9 | Begriff | Signal töten |
SIGSEGV | 11 | Ader | Ungültige Speicherreferenz |
SIGPIPE | 13 | Begriff | Gebrochene Pfeife: Schreiben Sie an die Pipe ohne Leser |
SIGALRM | 14 | Begriff | Timersignal von Alarm (2) |
SIGTERM | 15 | Begriff | Beendigungssignal |
SIGUSR1 | 30,10,16 | Begriff | Benutzerdefiniertes Signal 1 |
SIGUSR2 | 31,12,17 | Begriff | Benutzerdefiniertes Signal 2 |
SIGCHLD | 20,17,18 | Ign | Kind gestoppt oder beendet |
SIGCONT | 19,18,25 | Fahren Sie fort, wenn Sie angehalten haben | |
SIGSTOP | 17,19,23 | Halt | Prozess stoppen |
SIGTSTP | 18,20,24 | Halt | Stoppen Sie um tty |
SIGTTIN | 21,21,26 | Halt | tty-Eingabe für den Hintergrundprozess |
SIGTTOU | 22,22,27 | Halt | tty Ausgabe für Hintergrundprozess |
Die SignaleSigkill undSIGSTOP kann nicht gefangen, blockiert oder ignoriert werden.
Als nächstes die Signale nicht im POSIX.1-Standard, sondern in SUSv2 und SUSv3 / POSIX 1003.1-2001 beschrieben.
Signal | Wert | Aktion | Kommentar |
SIGPOLL | Begriff | Abrufbares Ereignis (Sys V). Synonym für SIGIO | |
SIGPROF | 27,27,29 | Begriff | Profilerstellungstimer abgelaufen |
SIGSYS | 12,-,12 | Ader | Schlechtes Argument für Routine (SVID) |
SIGTRAP | 5 | Ader | Trace / Haltepunktfalle |
SIGURG | 16,23,21 | Ign | Dringende Bedingung an der Buchse (4.2 BSD) |
SIGVTALRM | 26,26,28 | Begriff | Virtueller Wecker (4.2 BSD) |
SIGXCPU | 24,24,30 | Ader | CPU-Zeitlimit überschritten (4.2 BSD) |
SIGXFSZ | 25,25,31 | Ader | Dateigrößenlimit überschritten (4.2 BSD) |
Bis einschließlich Linux 2.2 das Standardverhalten fürSIGSYS, SIGXCPU, SIGXFSZund (bei anderen Architekturen als SPARC und MIPS)SIGBUS war den Prozess zu beenden (ohne Core Dump). (Bei einigen anderen Unices die Standardaktion fürSIGXCPU undSIGXFSZ Beenden des Prozesses ohne Core Dump.) Linux 2.4 entspricht den Anforderungen von POSIX 1003.1-2001 für diese Signale und beendet den Prozess mit einem Core Dump.
Als nächstes verschiedene andere Signale.
Signal | Wert | Aktion | Kommentar |
SIGEMT | 7,-,7 | Begriff | |
SIGSTKFLT | -,16,- | Begriff | Stapelfehler auf dem Coprozessor (nicht verwendet) |
SIGIO | 23,29,22 | Begriff | I / O jetzt möglich (4.2 BSD) |
SIGCLD | -,-,18 | Ign | Ein Synonym für SIGCHLD |
SIGPWR | 29,30,19 | Begriff | Stromausfall (System V) |
SIGINFO | 29,-,- | Ein Synonym für SIGPWR | |
SIGLOST | -,-,- | Begriff | Dateisperre verloren |
SIGWINCH | 28,28,20 | Ign | Fenstergröße ändern (4.3 BSD, Sun) |
SIGUNUSED | -,31,- | Begriff | Unbenutztes Signal (wird SIGSYS sein) |
(Signal 29 istSIGINFO / SIGPWR auf einem alpha aberSIGLOST auf einem sparc.)
SIGEMT ist in POSIX 1003.1-2001 nicht angegeben, wird jedoch auf den meisten anderen Unices angezeigt, deren Standardaktion normalerweise darin besteht, den Prozess mit einem Core Dump zu beenden.
SIGPWR (was in POSIX 1003.1-2001 nicht angegeben ist) wird normalerweise auf den anderen Unices, auf denen es erscheint, standardmäßig ignoriert.
SIGIO (was in POSIX 1003.1-2001 nicht angegeben ist) wird standardmäßig von mehreren anderen Unices ignoriert.
Echtzeitsignale
Linux unterstützt Echtzeitsignale, wie sie ursprünglich in den POSIX.4-Echtzeiterweiterungen definiert wurden (und jetzt in POSIX 1003.1-2001 enthalten sind). Linux unterstützt 32 Echtzeitsignale, nummeriert von 32 (SIGRTMIN) bis 63 (SIGRTMAX). (Programme sollten sich immer auf Notensignale in Echtzeit beziehenSIGRTMIN+ n, da der Bereich der Echtzeitsignalnummern in den verschiedenen Unices variiert.)
Im Gegensatz zu Standardsignalen haben Echtzeitsignale keine vordefinierten Bedeutungen: Der gesamte Satz von Echtzeitsignalen kann für anwendungsdefinierte Zwecke verwendet werden. (Beachten Sie jedoch, dass die LinuxThreads-Implementierung die ersten drei Echtzeitsignale verwendet.)
Die Standardaktion für ein nicht behandeltes Echtzeitsignal besteht darin, den Empfangsprozess zu beenden.
Echtzeitsignale unterscheiden sich wie folgt:
- Mehrere Instanzen von Echtzeitsignalen können in die Warteschlange gestellt werden. Wenn dagegen mehrere Instanzen eines Standardsignals geliefert werden, während das Signal derzeit gesperrt ist, wird nur eine Instanz in die Warteschlange gestellt.
- Wenn das Signal mit gesendet wirdSigqueue(2) kann ein Begleitwert (entweder eine ganze Zahl oder ein Zeiger) mit dem Signal gesendet werden. Wenn der Empfangsprozess einen Handler für dieses Signal einrichtet, verwenden Sie dieSA_SIGACTION Flagge ansigaction(2) dann kann er diese Daten über die si_value Bereich der siginfo_t Struktur als zweites Argument an den Handler übergeben. Darüber hinaus ist die si_pid und si_uid Felder dieser Struktur können verwendet werden, um die PID und die tatsächliche Benutzer-ID des Prozesses zu erhalten, der das Signal sendet.
- Echtzeitsignale werden in einer garantierten Reihenfolge geliefert. Mehrere Echtzeitsignale desselben Typs werden in der Reihenfolge geliefert, in der sie gesendet wurden. Wenn verschiedene Echtzeitsignale an einen Prozess gesendet werden, werden diese beginnend mit dem Signal mit der niedrigsten Nummer geliefert. (Niedrig nummerierte Signale haben die höchste Priorität.)
Wenn für einen Prozess sowohl Standard- als auch Echtzeitsignale anstehen, lässt POSIX den Prozess nicht spezifizieren, der zuerst ausgeliefert wird. Linux setzt, wie viele andere Implementierungen, in diesem Fall den Standardsignalen Vorrang ein.
Gemäß POSIX sollte eine Implementierung zulassen, dass mindestens _POSIX_SIGQUEUE_MAX (32) Echtzeitsignale in einen Prozess eingereiht werden. Anstatt jedoch eine Begrenzung pro Prozess festzulegen, setzt Linux die Anzahl der in der Warteschlange befindlichen Echtzeitsignale für alle Prozesse systemweit ein.
Dieses Limit kann (und mit Privilegien) über das Symbol geändert werden / proc / sys / kernel / rtsig-max Datei. Eine verwandte Datei, / proc / sys / kernel / rtsig-max , kann verwendet werden, um herauszufinden, wie viele Echtzeitsignale derzeit in der Warteschlange sind.
ENTSPRECHEND
POSIX.1
Wichtig: Verwenden Sie die Mann Befehl ( % Mann ), um zu sehen, wie ein Befehl auf Ihrem Computer verwendet wird.