18.10.2014 Aufrufe

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!