AA_PO-22549_KirstyPargeter-123RF.jpg

© Kirsty Pargeter, 123RF

Über Signale Prozesse in der Shell steuern

Klar signalisiert

Statt Prozesse einfach abzuschießen, fangen Profis deren Kommunikation geschickt ab und lenken mit den passenden Signalen die Arbeit des Rechners gekonnt in die gewünschte Richtung.

Meist kommt der Befehl kill als letztes Mittel der Wahl zum Einsatz: Sofort und ohne Pardon beenden Sie damit einen Prozess. Meist setzen Sie dazu das Kommando kill -9 Prozess-ID ab. Als Option übermitteln Sie das Signal 9, als Argument die Prozess-ID (PID), welche Sie meist aus der Ausgabe des Kommandos ps erhalten. Aber das ist nur eine der Möglichkeiten, die der Mechanismus bietet.

Signale

Die unter Linux gebräuchlichen Signale finden Sie in der Tabelle "Signale". Verwandte Systeme wie FreeBSD oder Solaris zeigen hier Abweichungen. Bei allen Systemen sind nur die Signale 1, 3, 9 und 15 identisch. Welche das von Ihnen verwendete System unterstützt, erfahren Sie mittels kill -l im Terminal. Den Befehl kill können Sie in der Form kill -Zahl PID oder kill -Signalname PID anwenden. Beim Einsatz des Signalnamens verwenden Sie den Namen ohne vorangestelltes SIG.

Für einige Beispiele dient daemon.sh aus Listing 1 als Ziel für die Signale. Das Programm zeigt in einer Schleife seinen Shell-Aufruf, die eigene PID und die Prozess-ID des Elternprozess (PPID) an.

Listing 1

#! /bin/sh
while true;
do
echo $0 $$ $PPID
sleep 1
done

Signale

Nummer Signal Wirkung Beispiel/Hinweis
1 SIGHUP Trennt den Kind- vom Elternprozess Beendet Prozess
2 SIGINT Beendet Prozess Entspricht [Strg]+[C]
3 SIGQUIT Beendet Prozess Prozess Darf Core-Dump erstellen
4 SIGILL Beendet Prozess nach falschem Aufruf (Rechtemangel, unbekannte Funktionen)
5 SIGTRAP Beendet Prozess fordert Trace/Debugger an (geht vom Prozess selbst aus)
6 SIGABRT Beendet Prozess (geht vom Prozess selbst aus)
7 SIGBUS Beendet Prozess Aufruf durch System nach Speicherzugriffsfehler
8 SIGFPE Beendet Prozess Bei Division durch 0
9 SIGKILL Beendet Prozess Schreibt keine Dateien mehr, Gefahr von Datenverlust
10 SIGUSR1 Benutzerdefiniertes Signal
11 SIGSEGV Beendet Prozess Nach Speicherzugriffsfehler
12 SIGUSR2 Benutzerdefiniertes Signal
13 SIGPIPE Beendet Prozess Problem mit einer Pipe
14 SIGALRM Beendet Prozess Nach Timer-Ablauf
15 SIGTERM Beendet Prozess Prozess schreibt Dateien zurück
16 SIGSTKFLT Beendet Prozess Nach Stack-Fehler am Co-Prozessor
17 SIGCHLD Beendet Kindprozess Geht vom Elternprozess aus
18 SIGCONT Setzt gestoppten Prozess fort
19 SIGSTOP Hält Prozess an
20 SIGTSTP Hält Prozess an entspricht [Strg]+[Z]

Sanft entfernt

In der Grundform beenden Sie einen Prozess mit SIGHUP. Dabei geht das System so vor, als hätten Sie das betreffende Terminal beendet. Umgekehrt verhindern Sie genau dies, indem Sie beim Programmstart ein nohup voranstellen. Damit läuft die Anwendung weiter, obwohl Sie sich anschließend abmelden, wie bei einer Sitzung via SSH.

Solange niemand etwas gegen den Prozess unternimmt oder den Rechner abschaltet, läuft das Skript, bis es von sich aus terminiert. Die Ausgabe lesen Sie in der Protokolldatei nohup.out, deren Inhalt Sie mittels tail -f nohup.out mitverfolgen.

Auf die gleiche Weise starten Sie bei Bedarf die meisten Daemons im System neu: kill -HUP Daemon-PID. Es empfiehlt sich aber trotzdem, das für den Daemon vorgesehene Init-Skript beziehungsweise den Start/Stop-Mechanismus des Systems zu verwenden.

Bei Bedarf halten Sie Prozesse an, um für den weiteren Verlauf notwendige Ressourcen bereitzustellen. Im Beispiel läuft das Skript daemon.sh und nach einigen Durchgängen erhält es das Signal 19. Das hält den Prozess an. Mittels kill -18 PID setzen Sie dessen Arbeit fort (Abbildung 1).

Abbildung 1: Starten, Anhalten und Fortsetzen eines Prozesses.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Verschlungene Pfade
    Mit Schleifen, Fallunterscheidungen und Funktionen programmieren Sie komplexe Skripte auf einfache und elegante Weise.
  • Prozesse anhalten und beenden mit kill
    Ein Linux-System bietet komfortable GUI-Tools für fast alle Zwecke. Schneller und direkter läuft die Kommunikation über die Shell. Was auf den ersten Blick kryptisch ausschaut, gerät schnell zum gewohnten Handwerkszeug. Die Reihe "Gast in der Shell" hilft mit Tipps in loser Folge beim Einstieg.
  • Signale sind ein wichtiges Linux-Feature
    Programme können unter Linux kommunizieren, indem sie sich "Signale" schicken. Wie das geht und wofür man Signale braucht, verraten wir in diesem Basics-Artikel.
  • Die Bash, das unbekannte Wesen
    Die Leistungsfähigkeit einer Shell ist nur zum Teil durch die komfortablen Möglichkeiten bei der interaktiven Bedienung begründet. Mindestens genauso wichtig sind die "inneren Werte" einer Shell, also die eingebauten Befehle, die Funktionen zur Bearbeitung von Variablen, Skripten und Funktionen sowie anderen Features.
  • [Linux] Rootkits auf kompromittierten Linux Systemen
Kommentare

Infos zur Publikation

LU 12/2017: Perfekte Videos

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Fernstudium Informatik
Joe Cole, 12.12.2017 10:36, 1 Antworten
Hallo! habe früher als ich 13 Jahre angefangen mit HTML und später Java zu programmieren. Weit...
Installation Linux mint auf stick
Reiner Schulz, 10.12.2017 17:34, 3 Antworten
Hallo, ich hab ein ISO-image mit Linux Mint auf einem Stick untergebracht Jetzt kann ich auch...
Canon Maxify 2750 oder ähnlicher Drucker
Hannes Richert, 05.12.2017 20:14, 4 Antworten
Hallo, leider hat Canon mich weiterverwiesen, weil sie Linux nicht supporten.. deshalb hier die...
Ubuntu Server
Steffen Seidler, 05.12.2017 12:10, 1 Antworten
Hallo! Hat jemand eine gute Anleitung für mich, wie ich Ubuntu Server einrichte? Habe bisher...
Tinte sparen bei neuem Drucker
Lars Schmitt, 30.11.2017 17:43, 2 Antworten
Hi Leute, ich habe mir Anfang diesen Monats einen Tintenstrahldrucker angeschafft, der auch su...