Skip to main content

Signal - Linux / Unix-Befehl

Bash Shell Scripting Tutorial | Shell Scripting Tutorial | Learn Shell Programming (Juni 2025)

Bash Shell Scripting Tutorial | Shell Scripting Tutorial | Learn Shell Programming (Juni 2025)

Inhaltsverzeichnis:

Anonim

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.

SignalWertAktionKommentar
oder Tod des Kontrollprozesses
SIGINT2BegriffUnterbrechen Sie von der Tastatur
SIGQUIT3AderBeenden Sie die Tastatur
SIGILL4AderIllegale Anweisung
SIGABRT6AderSignal von abbrechen abbrechen (3)
SIGFPE8AderGleitkomma-Ausnahme
Sigkill9BegriffSignal töten
SIGSEGV11AderUngültige Speicherreferenz
SIGPIPE13BegriffGebrochene Pfeife: Schreiben Sie an die Pipe ohne Leser
SIGALRM14BegriffTimersignal von Alarm (2)
SIGTERM15BegriffBeendigungssignal
SIGUSR130,10,16BegriffBenutzerdefiniertes Signal 1
SIGUSR231,12,17BegriffBenutzerdefiniertes Signal 2
SIGCHLD20,17,18IgnKind gestoppt oder beendet
SIGCONT19,18,25 Fahren Sie fort, wenn Sie angehalten haben
SIGSTOP17,19,23HaltProzess stoppen
SIGTSTP18,20,24HaltStoppen Sie um tty
SIGTTIN21,21,26Halttty-Eingabe für den Hintergrundprozess
SIGTTOU22,22,27Halttty 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.

SignalWertAktionKommentar
SIGPOLL BegriffAbrufbares Ereignis (Sys V). Synonym für SIGIO
SIGPROF27,27,29BegriffProfilerstellungstimer abgelaufen
SIGSYS12,-,12AderSchlechtes Argument für Routine (SVID)
SIGTRAP5AderTrace / Haltepunktfalle
SIGURG16,23,21IgnDringende Bedingung an der Buchse (4.2 BSD)
SIGVTALRM26,26,28BegriffVirtueller Wecker (4.2 BSD)
SIGXCPU24,24,30AderCPU-Zeitlimit überschritten (4.2 BSD)
SIGXFSZ25,25,31AderDateigröß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.

SignalWertAktionKommentar
SIGEMT7,-,7Begriff
SIGSTKFLT-,16,-BegriffStapelfehler auf dem Coprozessor (nicht verwendet)
SIGIO23,29,22BegriffI / O jetzt möglich (4.2 BSD)
SIGCLD-,-,18IgnEin Synonym für SIGCHLD
SIGPWR29,30,19BegriffStromausfall (System V)
SIGINFO29,-,- Ein Synonym für SIGPWR
SIGLOST-,-,-BegriffDateisperre verloren
SIGWINCH28,28,20IgnFenstergröße ändern (4.3 BSD, Sun)
SIGUNUSED-,31,-BegriffUnbenutztes 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:

  1. 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.
  2. 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.
  3. 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.