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.7 Jobverwaltuntoptop

Mit dem Job-Control-System können Sie Prozesse, die im Hintergrund laufen, in den Vordergrund holen. Dadurch können Sie Prozesse, die eventuell im Hintergrund »Amok« laufen (und die kompletten Ressourcen aufbrauchen) oder etwa auf eine Eingabe von stdin warten, hervorholen und unterbrechen oder gegebenenfalls wieder in den Hintergrund schicken und weiterlaufen lassen. Sie kennen das ja mittlerweile zuhauf: Wenn Sie einen Hintergrundprozess gestartet haben, wird die PID und eine Nummer in eckigen Klammern angezeigt. Bei dieser Nummer handelte es sich stets um die Jobnummer.

you@host > sleep 10 &
[1] 5915
you@host > sleep 5 &
[2] 5916

Hier wurden mit sleep also zwei Prozesse in den Hintergrund geschickt. Der Prozess mit der Nummer 5915 hat hier die Jobnummer 1 und 5916 die Nummer 2. Um sich jetzt einen Überblick zu allen sich im Hintergrund befindlichen Prozessen zu verschaffen, können Sie das Kommando jobs verwenden:

you@host > jobs
[1]-  Running                 sleep 10 &
[2]+  Running                 sleep 5 &

Das Kommando jobs zeigt Ihnen neben den Prozessen, die im Hintergrund laufen, auch den aktuellen Zustand an (hier mit Running). Ein Beispiel:

you@host > du /
...
...
(Strg)+(Z)
[1]+  Stopped                 du /

Der Prozess hat Ihnen einfach zu lange gedauert und Sie haben diesem zwangsläufig mit (Strg)+(Z) das Signal SIGSTOP geschickt, womit der Prozess kurzum angehalten wurde. Jetzt haben Sie einen gestoppten Prozess in Ihrer Prozessliste:

you@host > ps -l | grep du
+0 T  1000  6235  3237  0  78   0 –   769 pts/40   00:00:00 du

Anhand des T (für Traced) können Sie den Prozess erkennen. Auch ein Blick mit jobs zeigt Ihnen den Zustand des gestoppten Prozesses an:

you@host > jobs
[1]+  Stopped                 du /

Hinweis   Natürlich hat man gerade bei einem Hintergrundprozess keine Möglichkeit mehr, mit der Tastatur das Signal SIGSTOP (mit (Strg)+(Z)) an den laufenden Hintergrundprozess zu schicken, weil hier ja die Standardeingabe nach /dev/null umgelenkt wird. Hierbei können Sie von der Kommandozeile das Signal mittels kill an den entsprechenden Prozess schicken, sofern Sie diesen nicht gleich ganz beenden wollen.


Da Sie jetzt einen angehaltenen Prozess haben, können Sie unterschiedlich darauf reagieren:

gp  Sie senden dem angehaltenen Prozess das Signal SIGCONT, mit dem dieser seine Ausführung fortsetzt. Allerdings müssen Sie hier nicht zwangsläufig die Prozess-ID mit angeben, sondern können auch das Prozentzeichen % gefolgt von der Jobnummer verwenden:
you@host > kill -SIGCONT %1
    Damit wird der Job mit der Nummer »1« wieder fortgesetzt (SIGCONT = continue).
       
gp  Sie beenden den angehaltenen Prozess. Hier gehen Sie ebenso vor wie schon mit SIGCONT gezeigt, nur dass Sie eben das Signal SIGTERM oder, falls das nicht mehr geht, SIGKILL schicken:
you@host > kill %1
[1]+  Beendet                 du /
gp  Sie schieben einen angehaltenen Job mit bg (background) in den Hintergrund, wo dieser dann munter weiterläuft. Auch hierzu müssen Sie das Prozentzeichen und die entsprechende Jobnummer verwenden:
you@host > bg %1
    Geben Sie bg ohne Prozentzeichen an, wird der einzige Job, der möglich ist, in den Hintergrund geschickt. Verwenden Sie das Prozentzeichen ohne Jobnummer, bezieht sich die Angabe immer auf den aktuellen Job (current job).
       
gp  Sie lassen den Job mit fg (foreground) im Vordergrund weiterlaufen. Dies würde in etwa dem Fall von SIGCONT entsprechen, nur wäre es eben etwas komfortabler (kürzer). fg verwendet man genauso wie bg. Der Angabe des Prozentzeichens folgt die Jobnummer oder auch abgekürzt nur das Prozentzeichen, was den aktuellen Job (current job) im Vordergrund weiterlaufen lässt.

Tabelle 8.1 gibt nochmals einen Überblick zu den Funktionen der Jobverwaltung:


Tabelle 8.1   Kommandos zur Jobverwaltung

Job-Befehl Bedeutung
fg %jobnr Holt sich einen Job in den Vordergrund, wo dieser weiterläuft
bg %jobnr Schiebt einen angehaltenen Job in den Hintergrund, wo dieser weiterläuft
(Ctrl)+(Z) Hält einen sich im Vordergrund aufhaltenden Prozess auf (suspendiert diesen)
kill %jobnr Beendet einen Prozess
kill –SIGCONT %jobnr Setzt die Ausführung eines angehaltenen Prozesses fort (egal, ob im Hinter- oder Vordergrund)

Das folgende Script soll Ihnen den Sinn von fg näher demonstrieren.

# Name: ascript
echo "Das Script wird gestartet ..."
printf "Warte auf Eingabe: "
read input
echo "Script ist fertig ..."

Das Script bei einer Ausführung im Hintergrund:

you@host > ./ascript &
[1] 7338
[1]+  Stopped                 ./script1
you@host > fg %
./script1
Das Script wird gestartet ...
Warte auf Eingabe: Hallo
Script ist fertig ...
you@host >

Hier hat das Script von selbst angehalten, weil sich darin eine Eingabeaufforderung mittels read befand. Deshalb wurde das Script mittels fg in den Vordergrund geholt, um dieser Aufforderung nachzukommen. Anschließend wurde das Script weiter abgearbeitet.



Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

 << zurück
  
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Shell-Programmierung
Shell-Programmierung
bestellen
 Buchtipps
Zum Rheinwerk-Shop: Shell-Programmierung






 Shell-Programmierung


Zum Rheinwerk-Shop: Linux-Server






 Linux-Server


Zum Rheinwerk-Shop: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Rheinwerk-Shop: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
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.


Nutzungsbestimmungen | Datenschutz | Impressum

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

Cookie-Einstellungen ändern