Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
Shell-Programmierung von Jürgen Wolf
Einführung, Praxis, Referenz
Buch: Shell-Programmierung

Shell-Programmierung
782 S., mit CD, 44,90 Euro
Rheinwerk Computing
ISBN 3-89842-683-1
gp Kapitel 8 Rund um die Ausführung von Scripts und Prozessen
  gp 8.1 Prozessprioritäten
  gp 8.2 Warten auf andere Prozesse
  gp 8.3 Hintergrundprozess wieder hervorholen
  gp 8.4 Hintergrundprozess schützen
  gp 8.5 Subshells
  gp 8.6 Mehrere Scripts verbinden und ausführen (Kommunikation zwischen Scripts)
    gp 8.6.1 Datenübergabe zwischen Scripts
    gp 8.6.2 Rückgabe von Daten an andere Scripts
    gp 8.6.3 Scripts synchronisieren
  gp 8.7 Jobverwaltung
  gp 8.8 Shellscripts zeitgesteuert ausführen
  gp 8.9 Startprozess- und Profildaten der Shell
    gp 8.9.1 Arten von Initialisierungsdateien
    gp 8.9.2 Ausführen von Profildateien beim Start einer Login-Shell
    gp 8.9.3 Ausführen von Profildateien beim Start einer Nicht-Login-Shell (Bash und Korn-Shell)
    gp 8.9.4 Zusammenfassung alle Profil- und Startup-Dateien
  gp 8.10 Ein Shellscript bei der Ausführung
    gp 8.10.1 Syntaxüberprüfung
    gp 8.10.2 Expansionen
    gp 8.10.3 Kommandos
  gp 8.11 Shellscripts optimieren


Rheinwerk Computing

8.4 Hintergrundprozess schützetoptop

Wenn Sie Ihre Shell-Sitzung beenden, wird den Prozessen häufig ein SIGHUP-Signal gesendet. Bei Prozessen, die Sie im Hintergrund gestartet haben, bedeutet dies, dass der Prozess unweigerlich abgeschossen wird.


Hinweis   Beim Testen auf verschiedenen Systemen ist mir allerdings aufgefallen, dass dieser Effekt nicht überall auftrat. Bei SuSE 9.1 bspw. liefen nach der Abmeldung und dem Anmelden die Hintergrundprozesse immer noch. Im Gegensatz dazu wurde bei einem Solaris-System der Kind-Prozess (hier der Hintergrundprozess) beim Beenden der laufenden Shell mitgerissen und beendet.


Somit scheint diese Schwierigkeit ein wenig system- bzw. distributionsabhängig zu sein. Sofern Sie das Problem haben, dass Prozesse, die im Hintergrund laufen, beendet werden, wenn sich der Benutzer ausloggt oder ein Eltern-Prozess an alle Kind-Prozesse das Signal SIGHUP sendet und diese somit beendet werden, können Sie das Kommando nohup verwenden. Allerdings scheint es auch hier wieder keine Einheitlichkeit zu geben, auf dem einen System ist nohup ein binäres Programm und auf den anderen wiederum ein einfaches Shellscript, welches das Signal 1 (SIGHUP) mit trap auffängt. Die Syntax:

nohup Kommando [Argument ...]

Natürlich wird mit der Verwendung von nohup der Prozess hier nicht automatisch in den Hintergrund gestellt, sondern Sie müssen auch hier wieder am Ende der Kommandozeile das & setzen. Und das passiert, wenn Sie einen Prozess mit nohup in den Hintergrund schicken:

gp  Der Prozess erhält ausreichend Priorität, um im Hintergrund zu laufen. Genauer, der Prozess wird bei nohup um den Prioritätswert 5 erhöht.
gp  Der Prozess wird vor dem SIGHUP-Signal geschützt. Gleiches könnten Sie auch realisieren, indem Sie mit trap das Signal 1 abfangen.
gp  Wenn das Kommando die Standardausgabe und Standardfehlerausgabe auf das laufende Terminal benutzt, so wird diese in die Datei nohup.out umgeleitet. Sollte das nicht funktionieren, wird versucht, die Ausgabe in die Datei $HOME/nohup.out umzuleiten (meistens der Fall). Lässt sich die Datei nohup.out überhaupt nicht anlegen, verweigert nohup seine Ausführung.

Als Rückgabewert liefert Ihnen die Funktion nohup den Fehlercode des Kommandos zurück. Sollte der Fehlercode allerdings den Wert 126 oder 127 haben, so bedeutet dies, dass nohup das Kommando gefunden hat, aber nicht starten konnte (126), oder dass nohup das Kommando gar nicht finden konnte (127).

Hier einige Beispiele:

you@host > find / -user $USER -print > out.txt 2>&1 &
[2] 4406
you@host > kill -SIGHUP 4406
you@host >
[2]+  Aufgelegt          find / -user $USER -print >out.txt 2>&1
you@host > nohup find / -user $USER -print > out.txt 2>&1 &
[1] 4573
you@host > kill -SIGHUP 4573
you@host > ps | grep find
 4573 pts/40   00:00:01 find
you@host > nohup find / -user $USER -print &
[1] 10540
you@host > nohup: hänge Ausgabe an nohup.out an
you@host > exit
### --- Nach neuem Login ---- ####
you@host > cat nohup.out
...
/home/tot/HelpExplorer/uninstall.sh
/home/tot/HelpExplorer/EULA.txt
/home/tot/HelpExplorer/README
/home/tot/HelpExplorer/starthelp
/home/tot/.fonts.cache-1
...


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
 << zurück
  
  Zum Katalog
Zum Katalog: Shell-Programmierung
Shell-Programmierung
bestellen
 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-Server






 Linux-Server


Zum Katalog: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Katalog: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Katalog: Linux Handbuch






 Linux Handbuch


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de