LinuxUser Videos bearbeiten (Vorschau)
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Signals & Traps<br />
Know-how<br />
wandte Systeme wie FreeBSD oder Solaris<br />
zeigen hier Abweichungen. Bei allen<br />
Systemen sind nur die Signale 1, 3, 9<br />
und 15 identisch. Welche das von Ihnen<br />
verwendete System unterstützt, erfahren<br />
Sie mittels kill ‐l im Terminal. Den<br />
Befehl kill können Sie in der Form kill<br />
‐Zahl PID oder kill ‐Signalname PID<br />
anwenden. Beim Einsatz des Signalnamens<br />
verwenden Sie den Namen ohne<br />
vorangestelltes SIG.<br />
Für einige Beispiele dient daemon.sh<br />
aus Listing 1 als Ziel für die Signale. Das<br />
Programm zeigt in einer Schleife seinen<br />
Shell-Aufruf, die eigene PID und die Prozess-ID<br />
des Elternprozess (PPID) an.<br />
Sanft entfernt<br />
In der Grundform beenden Sie einen<br />
Prozess mit SIGHUP. Dabei geht das System<br />
so vor, als hätten Sie das betreffende<br />
Terminal beendet. Umgekehrt verhindern<br />
Sie genau dies, indem Sie beim Programmstart<br />
ein nohup voranstellen. Damit<br />
läuft die Anwendung weiter, obwohl<br />
Sie sich anschließend abmelden, wie bei<br />
einer Sitzung via SSH.<br />
Solange niemand etwas gegen den<br />
Prozess unternimmt oder den Rechner<br />
Listing 3<br />
#! /bin/sh<br />
a="Vorbelegung"<br />
# Funktion definieren<br />
signalabfaenger() {<br />
echo ‐n "Neuen Wert eingeben:<br />
";read a<br />
if [ ‐z "$a" ];<br />
then<br />
echo "Keine Eingabe ‐><br />
Abbruch!"<br />
exit<br />
fi<br />
continue<br />
exit 0<br />
}<br />
# Signal 2 ([Strg]+[C]) abfangen<br />
trap 'signalabfaenger' 2<br />
while true;<br />
do<br />
echo "$$: $a"<br />
sleep 3<br />
done<br />
abschaltet, läuft das Skript, bis es von<br />
sich aus terminiert. Die Ausgabe lesen<br />
Sie in der Protokolldatei nohup.out, deren<br />
Inhalt Sie mittels tail ‐f nohup.out<br />
mitverfolgen. Auf die gleiche Weise starten<br />
Sie die meisten Daemons im System<br />
neu: kill ‐HUP Daemon‐PID. Es empfiehlt<br />
sich aber trotzdem, das für den<br />
Daemon vorgesehene Init-Skript beziehungsweise<br />
den Start/Stop-Mechanismus<br />
des Systems zu verwenden.<br />
Bei Bedarf halten Sie Prozesse an, um<br />
für den weiteren Verlauf notwendige<br />
Ressourcen bereitzustellen. Im Beispiel<br />
aus Abbildung 1 läuft das Skript<br />
daemon.sh und nach einigen Durchgängen<br />
erhält es das Signal 19. Das hält den<br />
Prozess an. Mittels kill ‐18 PID setzen<br />
Sie dessen Arbeit fort.<br />
Signale abfangen<br />
Es gibt keine Möglichkeit, SIGKILL und<br />
SIGSTOP per Trap abzufangen, zu blockieren<br />
oder zu ignorieren. Alle anderen<br />
Signale<br />
Nummer Signal Wirkung Beispiel/Hinweis<br />
1 SIGHUP Trennt den Kind- vom Beendet Prozess<br />
Elternprozess<br />
2 SIGINT Beendet Prozess Entspricht [Strg]+[C]<br />
3 SIGQUIT Beendet Prozess Prozess darf Core-Dump erstellen<br />
4 SIGILL Beendet Prozess Falscher Aufruf (Rechtemangel,<br />
unbekannte Funktionen)<br />
5 SIGTRAP Beendet Prozess fordert Trace/Debugger an<br />
(geht vom Prozess selbst aus)<br />
6 SIGABRT Beendet Prozess (geht vom Prozess selbst aus)<br />
7 SIGBUS Beendet Prozess Aufruf durch System nach<br />
Speicherzugriffsfehler<br />
8 SIGFPE Beendet Prozess Bei Division durch 0<br />
9 SIGKILL Beendet Prozess Schreibt keine Dateien mehr,<br />
Gefahr von Datenverlust<br />
10 SIGUSR1 Benutzerdefiniertes Signal –<br />
11 SIGSEGV Beendet Prozess Nach Speicherzugriffsfehler<br />
12 SIGUSR2 Benutzerdefiniertes Signal –<br />
13 SIGPIPE Beendet Prozess Problem mit einer Pipe<br />
14 SIGALRM Beendet Prozess Nach Timer-Ablauf<br />
15 SIGTERM Beendet Prozess Prozess schreibt Dateien zurück<br />
16 SIGSTKFLT Beendet Prozess Nach Stack-Fehler am Koprozessor<br />
17 SIGCHLD Beendet Kindprozess Geht vom Elternprozess aus<br />
18 SIGCONT Setzt gestoppten Prozess fort –<br />
19 SIGSTOP Hält Prozess an –<br />
20 SIGTSTP Hält Prozess an entspricht [Strg]+[Z]<br />
11.2014 www.linux-user.de<br />
93