|
|
|
B.9 Signale – Das neue Signalkonzept
B.9.1 Signalmengen
Tabelle B.45
Manipulation von Signalmengen
Syntax
|
Bedeutung
|
int sigemptyset(sigset_t *set);
|
Signale aus der Signalmenge entfernen auf die set zeigt
|
int sigfillset(sigset_t *set);
|
Signale zur Signalmenge hinzufügen auf die set zeigt
|
int sigaddset(sigset_t *set,
int signum);
|
Ein einzelnes Signal zur Signalmenge hinzufügen
|
int sigdelset(sigset_t *set,
int signum);
|
Ein einzelnes Signal aus der Signalmenge entfernen
|
int sigismember(
const sigset_t *set,
int signum);
|
Testen ob ein bestimmtes Signal in der Signalmenge vorkommt
|
B.9.2 (POSIX) Signalhandler-Funktionen
Tabelle B.46
Signalhandler-Funktionen
Syntax
|
Bedeutung
|
int sigaction(
int signum,
const struct sigaction *act,
struct sigaction *oldact);
|
Erfragen und einrichten von Signalhandlern
|
int sigprocmask(
int how,
const sigset_t *set,
sigset_t *oldset);
|
Erfragen oder ändern der Signalmaske
|
int sigpending(sigset_t *set);
|
Erfragen der Signale, die Blockieren (hängen)
|
int sigsuspend(
const sigset_t *mask);
|
Suspendieren des Prozesses während der Änderung der Signalmaske
|
B.9.3 Übersicht zu den Signalen
Tabelle B.47
Signale, die meist bei Programmfehlern auftreten
Name
|
Nr.
|
Aktion
|
verfügbar
|
Bedeutung
|
SIGFPE
|
8
|
Core & Ende
|
POSIX
|
Problem bei einer Gleitkommaoperation (1.5/0)
|
SIGILL
|
4
|
Core & Ende
|
POSIX
|
Ungültige Instruktion wurde ausgeführt
|
SIGBUS
|
7
|
Core & Ende
|
|
Fehler auf dem System-Bus
|
SIGSYS
|
31
|
Core & Ende
|
|
ungültiges Argument bei System-Call
|
SIGEMT
|
|
Ende
|
|
Emulations-Trap
|
SIGTRAP
|
5
|
Core & Ende
|
|
Unterbrechung (Einzelschrittausführung)
|
SIGIOT
|
|
Core & Ende
|
|
wie SIGABRT
|
SIGABRT
|
6
|
Core & Ende
|
POSIX
|
Abnormale Beendigung
|
SIGSEGV
|
11
|
Core & Ende
|
POSIX
|
Speicherzugriff auf unerlaubten Speichersegment
|
Tabelle B.48
Signale, die den Prozess beenden
Name
|
Nr.
|
Aktion
|
verfügbar
|
Bedeutung
|
SIGTERM
|
15
|
Ende
|
POSIX
|
Programmende. Programme die TERM abfangen heißt das meistens, dass man mit kill() einen »friedlichen Shutdown« erzwingt.
|
SIGINT
|
2
|
Ende
|
POSIX
|
Interrupt der Dialogstation ((STRG)+(C))
|
SIGHUP
|
1
|
Ende
|
POSIX
|
Abbruch einer Dialogstationsleitung, bzw. Konfiguration neuladen für Dämons
|
SIGKILL
|
9
|
Ende
|
POSIX
|
Das Signal kill
|
SIGQUIT
|
3
|
Core & Ende
|
POSIX
|
Das Signal quit von einer Dialogstation
|
Tabelle B.49
Signale, die bei Beendigung eines Timers auftreten – Alarm
Name
|
Nr.
|
Aktion
|
verfügbar
|
Bedeutung
|
SIGALRM
|
14
|
Ende
|
POSIX
|
Zeituhr ist abgelaufen – alarm()
|
SIGVTALRM
|
26
|
Ende
|
BSD, SVR4
|
Der virtuelle Wecker ist abgelaufen
|
SIGPROF
|
27
|
Ende
|
|
Timer zur Profileinstellung ist abgelaufen
|
Tabelle B.50
Asynchrone E/A-Signale
Name
|
Nr.
|
Aktion
|
verfügbar
|
Bedeutung
|
SIGIO
|
29
|
Ignoriert
|
BSD, SVR4
|
Socket E/A ist möglich
|
SIGURG
|
23
|
Ignoriert
|
BSD, SVR4
|
Dringender Socketstatus ist eingetreten
|
SIGPOLL
|
|
Ende
|
SVR4
|
Ein anstehendes Ereignis bei Streams wird signalisiert
|
Tabelle B.51
Signale zur Prozesskontrolle
Name
|
Nr.
|
Aktion
|
verfügbar
|
Bedeutung
|
SIGCHLD
|
17
|
Ignoriert
|
POSIX
|
Der Kindprozess wurde beendet oder angehalten
|
SIGTTIN
|
21
|
Anhalten
|
POSIX
|
Prozess wollte aus einem Hintergrundprozess der Kontroll-Dialogstation lesen.
|
SIGTTOU
|
22
|
Anhalten
|
POSIX
|
Prozess wollte in einem Hintergrundprozess der Kontroll-Dialogstation schreiben.
|
SIGCLD
|
|
Ignoriert
|
|
wie SIGCHLD
|
SIGSTOP
|
19
|
Anhalten
|
POSIX
|
Der Prozess wurde angehalten
|
SIGTSTP
|
20
|
Anhalten
|
POSIX
|
Der Prozess wurde »von Hand« mit STOP anghalten
|
SIGCONT
|
18
|
Ignoriert
|
POSIX
|
Ein Angehaltener Prozess läuft weiter
|
Tabelle B.52
Signale, die bei Fehlern einer Operation ausgelöst werden
Name
|
Nr.
|
Aktion
|
verfügbar
|
Bedeutung
|
SIGPIPE
|
13
|
Ende
|
POSIX
|
Es wurde in eine Pipe geschrieben, woraus niemand liest. Es wurde versucht in eine Pipe mit O_NONBLOCK zu schreiben, woraus keiner liest. Bei nicht-NONBLOCK hält das Öffnen/Schreiben der Pipe auf.
|
SIGLOST
|
|
Ende
|
|
Eine Dateisperre ging verloren
|
SIGXCPU
|
24
|
Core & Ende
|
BSD, SVR4
|
Maximale CPU-Zeit wurde überschritten
|
SIGXFSZ
|
25
|
Core & Ende
|
BSD, SVR4
|
Maximale Dateigröße wurde überschritten
|
Tabelle B.53
Die restlichen Signale
Name
|
Nr.
|
Aktion
|
verfügbar
|
Bedeutung
|
SIGUSR1
SIGUSR2
|
10, 12
|
Ende
|
POSIX
|
frei zur eigenen Benutzung
|
SIGWINCH
|
28
|
Ignoriert
|
BSD
|
Window-Größe hat sich verändert
|
B.9.4 Signale senden und Prozesse suspendieren
Tabelle B.54
Signale senden und Prozesse suspendieren
Syntax
|
Bedeutung
|
int raise(int sig);
|
Signal an den eigenen Prozess senden (ANSI C-konform). Gleichwertig zu kill(getpid(), sig);
|
int kill(pid_t pid, int sig);
|
Signal an den eigenen oder auch einen anderen Prozess mit der PID pid senden.
|
unsigned int alarm(
unsigned int seconds);
|
Eine Alarm-Zeitschaltuhr einrichten, welche nach einer bestimmten Zeit (Sekunden) das Signal SIGALRM an den eigenen Prozess sendet.
|
int pause(void);
|
Prozess suspendieren, bis ein Signal eintrifft.
|
unsigned int sleep(
unsigned int sec);
|
Prozess eine gewisse Zeit (Sekunden) supendieren oder bis ein Signal eintrifft.
|
int select(
0, NULL, NULL, NULL,
struct timeval *timeout);
|
Prozess eine gewisse Zeit (Sekunden und Mikrosekunden) supendieren oder bis ein Signal eintrifft.
|
int usleep(unsigned long usec);
|
Prozess eine gewisse Zeit (Mikrosekunden) supendieren oder bis ein Signal eintrifft.
|
int nanosleep(
const struct timespec *req,
struct timespec *rem);
|
Prozess eine gewisse Zeit (Sekunden und Nanosekunden eventuell möglich (Systemabhängig)) supendieren oder bis ein Signal eintrifft.
|
|
|
|
|
|
|
|
Ihre Meinung? |
|
|
|
|
|
|
Lieferung |
|
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz Info
|
|
|
|