orm@doc-tcpip.org | Erstellt: Februar 1999 - Letzte Modifikation: November 2001 |
Die Kontrolle mehrerer Prozesse ist ein Teil von Unix und fast genauso alt wie Unix selbst. Das ist durchaus bemerkenswert, wenn man bedenkt, wie lange es soetwas bei anderen OSen nicht gegeben hat - man denken an Windows oder MAC.
Unter Unix kann man einen Prozess gleich in den Hintergrund schicken. Der Prozess gibt dann die Kontrolle über die Shell ab, sodaß man normal weiterarbeiten kann. Das geschieht, indem man den Prozess mit einem Ampersand (&) startet. Das System ordnet dann eine Jobnummer zu und gibt diese beim Start und der Terminierung des Prozesses aus:
START: $ mein_prozess & [1] mein_prozess TERMINIERUNG: Ist der Job durch: Exit Status 0 ist ok: [1]+ Done Exit Status anders: [1]+ Exit 1 mein_prozess
Ein Prozess, der schon läuft und das Terminal blockiert, muß man zuerst anhalten, um ihn dann in den Hintergrund zu schicken. Das Stoppen des Prozesses erfolgt mit CTRL-Z. Setzt man dann das bg-Kommando ab, geht der Prozess in den Hintergrund. Setzt man in der Shell das fg-Kommando ab, so wird der letzte in den BG geschickte Prozess wieder hochgeschickt.
fg %mein_prozess fg %fg PID
Wie sehe ich jetzt, welche Jobs laufen? Dazu dient das jobs-Kommando. Dieses erlaubt es, die laufenden Jobs zu steuern. Folgende Schalter sind meistens vorhanden:
Einen Job stoppt man mit einer Steuer-Sequenz: CTRL-Z stoppt einen laufenden Prozess, der im Vordergrund lief und das Terminal blockierte. Man erhält dann eine Rückgabe dieser Art: [1]+ stopped mein_prozess. Danach hat man seinen Prompt wieder. Der Prozess lebt natürlich noch, und man kann ihn jetzt mit fg wieder anlaufen lassen oder ihn mit bg in den Hinterschicken.
Das ist praktisch, wenn man z.B. ein Latex-Eingabe File oder Source Code editiert:
vi xxxx CTRL-Z latex oder Programm-Testlauf ==> Fehler fg und weiterarbeiten.....Hier eine Liste der gängisten Steuer-Sequenzen:
Das Kommando kill %1 (ist wie kill PID, klar) killt den entsprechden Prozess. Es gibt folgende Rückgabe: [1]+ Terminate mein_prozess. Technisch schickt die Shell ein TERM Signal an den Prozess.
Es gibt Prozesse, die mit einem TERM Signal umgehen können und es abfangen. Dann kann man den Prozess (Job) mit kill -QUIT killen. In der Rückgabe findet sich dann ein Fehlerkode: [1]+ Exit 131.
Shell Skripte zählen Error-Codes ab 128. 131 ist also Code 3, weil QUIT das Signal 3 ist.. Das hängt alles stark vom Unix ab....
[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | RPi | SMTP | Tracing | GPS | LW ]
Copyright 2001-2021 by Orm Hager - Es gilt die GPL