signal(3-ucb) (BSD Compatibility Package) signal(3-ucb)
NAME
signal - Vereinfachte Signalfunktion der Software
SYNTAX
/usr/ucb/cc [flag ...] file ... -lucb
#include <signal.h>
void (*signal(sig, func))()
void (*func)();
BESCHREIBUNG
signal ist eine vereinfachte Schnittstelle für die allgemeinere Funk-
tion sigvec(3). Programme, die signal der Funktion sigvec vorziehen,
sind leichter auf andere Systeme portierbar.
Ein Signal wird bei manchen anormalen Ereignissen ausgegeben, vom
Benutzer eines Terminals (durch Quit, Interrupt oder Stop), durch
einen Programmfehler (zum Beispiel einen Busfehler), durch einen
Request eines anderen Programms (Kill) oder durch das Stoppen eines
Prozeßes generiert, da dieser im Hintergrund auf sein Steuerungstermi-
nal zugreifen will [siehe termio(7)]. Ferner können Signale optional
generiert werden, wenn ein Prozeß, nachdem er gestoppt wurde, wiede-
raufgenommen wird, wenn sich der Status des Sohnprozesses ändert oder
wenn am Steuerungsterminal Eingabe ansteht. Bei den meisten Signalen
wird der empfangende Prozeß beendet, wenn keine Maßnahmen durchgeführt
werden. Bei einigen Signalen wird der Prozeß, der das Signal empfängt,
angehalten oder sie werden einfach gelöscht, falls vom Prozeß nicht
anders angefordert. Mit Ausnahme von SIGKILL und SIGSTOP können Sig-
nale mit dem Aufruf von signal entweder ignoriert werden oder sie kön-
nen Interrupts an eine angegebene Stelle ausgeben. Es folgt eine Liste
aller Signale mit den Namen aus der Include-Datei <signal.h>.
SIGHUP Hangup
SIGINT Interrupt
SIGQUIT * Quit
SIGILL * Ungültige Anweisung
SIGTRAP * Ablaufverfolgungsunterbrechung
SIGABRT * Abbruch [generiert durch die Routine abort(3C)]
SIGEMT * Emulatorunterbrechung
SIGFPE * Arithmetische Ausnahmebedingung
SIGKILL Kill (Abfangen, Blockieren, Ignorieren nicht möglich)
SIGBUS * Busfehler
SIGSEGV * Verletzung der Segmentierungsregeln
SIGSYS * Ungültiges Argument in Systemaufruf
SIGPIPE Schreiben in eine Pipe oder anderen Socket ohne Leser
SIGALRM Alarm
SIGTERM Software-Beendigungssignal
SIGURG - Dringende Bedingung in Socket
SIGSTOP + Stop (Abfangen, Blockieren, Ignorieren nicht möglich)
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
signal(3-ucb) (BSD Compatibility Package) signal(3-ucb)
SIGTSTP + Von der Tastatur generiertes Signal stoppen
SIGCONT - Weiter nach Stopp (Blockieren nicht möglich)
SIGCHLD - Sohnstatus hat sich geändert
SIGTTIN + Lesen im Hintergrund vom Steuerungsterminal nicht möglich
SIGTTOU + Schreiben im Hintergrund auf Steuerungsterminal nicht
möglich
SIGIO - E/A auf Deskriptor möglich [siehe fcntl(2)]
SIGXCPU CPU-Zeitlimit überschritten [siehe setrlimit(2)]
SIGXFSZ Max. Dateigröße überschritten [siehe setrlimit(2)]
SIGVTALRM Alarm für virtuelle Prozeßzeit [siehe setitimer(3C)]
SIGPROF Alarm für Timer zur Profilerstellung [siehe setitimer(3C)]
SIGWINCH - Fenster geändert [siehe termio(7)]
SIGUSR1 Benutzerdefiniertes Signal 1
SIGUSR2 Benutzerdefiniertes Signal 2
Bei den Signalen, die in der Liste mit einem Stern "*" versehen sind,
wird ein Speicherabzug erstellt, wenn sie nicht abgefangen oder igno-
riert werden.
Wenn func den Wert SIGDFL hat, wird die Standardaktion für das Signal
sig wieder eingesetzt; hierbei handelt es sich im Normalfall um eine
Beendigung (mit Speicherabzug bei den Signalen mit Stern), außer bei
den Signalen, die mit "-" oder "+" markiert sind. Mit "-" markierte
Signale werden gelöscht, wenn es sich um eine SIGDFL-Aktion handelt;
bei mit "+" markierten Signalen wird der Prozeß angehalten. Wenn func
den Wert SIGIGN hat, wird das Signal anschließend ignoriert und noch
anstehende Wiederholungen dieses Signals werden gelöscht. Andernfalls
werden beim Auftreten des Signals alle weiteren Vorkommnisse des Sig-
nals blockiert und func wird aufgerufen.
Bei einer Rückkehr von dieser Funktion wird die Blockierung des bear-
beiteten Signals aufgehoben, und der Prozeß wird an der Stelle wiede-
raufgenommen, an der er unterbrochen wurde.
Wenn ein abgefangenes Signal bei bestimmten Systemaufrufen ausgegeben
und dadurch der Aufruf vorzeitig beendet wird, wird dieser Aufruf
automatisch neu gestartet. Dies kann zum Beispiel bei einem read- oder
write-Aufruf auf einem langsamen Gerät (wie einem Terminal, jedoch
nicht bei einer Datei) und während eines wait-Aufrufs auftreten.
Der Wert von signal ist der vorherige (oder ursprüngliche) Wert von
func für das entsprechende Signal.
Nach fork oder vfork werden alle Signale von dem Sohnprozeß übernom-
men. Ein execve setzt alle abgefangenen Signale auf ihre Standardak-
tion zurück; ignorierte Signale werden weiterhin ignoriert.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
signal(3-ucb) (BSD Compatibility Package) signal(3-ucb)
HINWEISE
Die Routine zur Signalbearbeitung kann folgendermaßen deklariert wer-
den:
void handler(sig, code, scp, addr);
int sig, code;
struct sigcontext *scp;
char *addr;
Dabei gilt folgendes:
sig Die Signalnummer.
code Ein Parameter bestimmter Signale, der zusätzliche Detailangaben
enthält.
scp Ein Zeiger auf die Struktur sigcontext (definiert in
<signal.h>), die zur Wiederherstellung des Kontextes in den
Zustand vor dem Auftreten des Signals dient.
addr Zusätzliche Adreßinformationen.
RÜCKGABEWERT
Bei einem erfolgreichen Aufruf wird die vorherige Aktion zurückgege-
ben. Andernfalls wird -1 zurückgegeben, und errno wird gesetzt, um den
Fehler anzuzeigen.
DIAGNOSE
Bei folgender Bedingung schlägt signal fehl, und es erfolgt keine
Aktion:
EINVAL sig ist entweder keine gültige Signalnummer oder ist das Sig-
nal SIGKILL bzw. SIGSTOP.
SIEHE AUCH
kill(1), execve(2), fcntl(2), fork(2), getrlimit(2), kill(2),
ptrace(2), read(2), sigaction(2), wait(2), write(2), sigblock(3),
sigpause(3), sigsetmask(3), sigstack(3), sigvec(3), wait3(3),
getitimer(3C), setjmp(3C), setjmp(3C-ucb), signal(5), termio(7).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98