Prozesse in Linux Das Dateisystem - Inhalt Das Prozessdateisystem Inhalt Index


Interprozesskommunikation

Signale sind eine Möglichkeit zur Interprozesskommunikation. Vom Kernel verwendet, dienen sie dazu, Prozesse über bestimmte Ereignisse zu informieren; der Nutzer bedient sich ihrer, um hängen gebliebene Prozesse abzubrechen oder diese anzuweisen, ihre Konfigurationsdateien neu einzulesen.

Die Nutzersignale unterliegen bestimmten Restriktionen, sie dürfen nur an dem Nutzer zugeordnete Prozesse versandt werden. Nicht einmal root hat dem init-Prozess etwas zu sagen.

Signal Nummer Aktion
SIGHUP 1 Terminal-Hangup, bei Dämonen verwendet, um ein erneutes Einlesen der Konfigurationsdateien zu erzwingen
SIGINT 2 Tastatur-Interrupt
SIGQUIT 3 Ende von der Tastatur
SIGILL 4 Illegaler Befehl
SIGABRT 5 Abbruch-Signal von abort(3)
SIGFPE 8 Fließkommafehler (z.B. Division durch Null)
SIGKILL 9 Unbedingte Beendigung eines Prozesses
SIGSEGV 11 Speicherzugrifffehler
SIGPIPE 13 Schreiben in eine Pipe, ohne dass ein Prozess daraus liest
SIGTERM 15 Prozess soll sich beenden (default von kill)
SIGCHLD 17 Ende eines Kindprozesses
SIGCONT 18 Gestoppter Prozess wird fortgesetzt
SIGSTP 20 Ausgabe wurde angehalten
SIGUSR1 30 Nutzerdefiniertes Signal

Die genaue Zuordnung zwischen symbolischem Signal und Nummer ist in Linux in der Datei /usr/include/linux/asm/signal.h zu finden.

Zum manuellen Versenden von Signalen dienen die beiden Kommandos kill und killall. kill erwartet im Argument die ID des Prozesses, während killall den Namen des Programmes verlangt. Beide Kommandos verstehen die Signalangabe in numerischer (1 für SIGHUP,..., 9 für SIGKILL,...) als auch in symbolischer (HUP für SIGHUP,..., KILL für SIGKILL,...) Form.

Als Beispiel nehmen wir an, der "Netscape" reagiere nicht mehr (was leider keine hypothetische Annahme darstellt). Also werden wir den entsprechenden Prozess per Hand beenden:

# mittels killall auf die höfliche Tour
user@sonne> killall -15 netscape

# reagiert Netscape immer noch nicht, dann auf die harte Tour
user@sonne> killall -KILL netscape

# mittels kill
user@sonne> ps ax | grep netscape
   887 tty1      S      2:12 /opt/netscape/netscape
user@sonne> kill -9 887


Prozesse in Linux Das Dateisystem - Inhalt Das Prozessdateisystem Inhalt Index