Job-Steuerung im Terminal (Bash)
Prozesse im Hintergrund laufen lassen, in den Vordergrund holen, von der Shell trennen und mehr.
Vielleicht kennt Ihr das: Man startet ein grafisches Programm aus dem Terminal und schon kann man die Shell nicht mehr nutzen, ohne das Programm zu beenden. Oder: Ihr wart cleverer und habt das Programm im Hintergrund gestartet - wollt es jetzt aber wieder im Vordergrund haben? Und noch mieser: Ihr schließt das Terminalfenster - und damit auch sämtliche gestarteten Programme, die aber eigentlich weiter laufen sollten ...
Vorder- und Hintergrund
Als Beispiel soll das GUI-Programme xeyes dienen. Standardmäßig startet Ihr xeyes unter Bash schlicht per:
xeyes
Damit läuft das Programm im Vordergrund - der Terminal ist für weitere Eingaben gesperrt. Wenn Ihr den Terminal aber weiter benutzen wollt, könnt Ihr xeyes Hintergrund starten:
xeyes &
Nun bleibt der Prompt im Terminal erhalten, Ihr könnt weiterarbeiten. Aber auch das bringt ein Problemchen mit sich: Das im Hintergrund laufende Programm könnt Ihr nicht ohne Weiteres mit STRG+Z pausieren. Auch schließen könnt Ihr das Tool nicht im Terminal via STRG+C, sondern nur über einen Klick auf das X am Fenster - sofern ein Fenster existiert!
Nun stellt sich eine Frage: Wie bekommt man bereits gestartete Programme in den Vorder- beziehungsweise Hintergrund? Wenn es im Vordergrund läuft, müsst Ihr das Programm erst mit STRG+Z pausieren und dann in den Hintergrund verfrachten, als wäre es direkt mit & gestartet worden:
STRG+Z
bg xeyes
Wenn es im Hintergrund läuft, könnt Ihr es direkt in den Vordergrund schubsen:
fg xeyes
Wenn Ihr wissen wollt, welche Jobs überhaupt aus der aktuellen Shell gestartet wurden, genügt ein simples
jobs
um alle Jobs anzuzeigen. fg und bg funktionieren natürlich auch über die Job-Nummern.
Terminal schließen
Es bleibt das Problem mit dem Terminalfenster. Angenommen, Ihr habt jetzt drei Stunden lang etliche Programme aus ein und derselben Shell geöffnet und wollt sie auch offen lassen - die Shell/das Terminalfenster aber schließen. Schließt Ihr es einfach über exit oder das X am Fenster, werden auch alle daraus geöffneten Programme geschlossen. Zum Entkoppeln von xeyes könntet Ihr
disown xeyes
nutzen. Zum Entkoppeln aller (-a) laufenden (-r) Jobs tut es ein
disown -ar
Versucht es danach nochmal mit dem Befehl jobs: Ihr werdet keine Jobs mehr vorfinden und könnt das Terminalfenster gefahrlos schließen.
Jobs schließen
Ihr könnt Jobs natürlich auch gezielt schließen - allerdings nicht über die Job-Nummern, die noch bei bg/fg funktioniert haben. Ihr benötigt die Prozess-IDs, die Ihr via
jobs -l
auflisten lassen könnt. Angenommen zu Job Nummer 1, xeyes, wird 1234 angezeigt:
kill 1234
Das Kommando kill sendet hier sein Standard-Signal SIGTERM, das auf die Nummer 15 hört; von daher erledigt der folgende Befehl exakt das Gleiche wie der vorige:
kill -15 1234
kill kann 64 verschiedene Signale an Prozesse senden, wobei vor allem SIGKILL interessant ist, weil Ihr damit auch Prozesse/Jobs beenden könnt, die sich aufgehängt haben und daher nicht auf SIGTERM reagieren.
Weitere Artikel rund um die Kommandozeile findet Ihr hier, unsere hauseigene Linux-Hilfe für den Terminal im Terminal hier.
Hallo, Ein toller Beitrag. Das habe ich wieder was gelernt.
Ich schaue mir die Seite über Privacy Browser auf dem Smartphone an. Das solltest du auch mal tun. Die Seite sieht furchtbar aus. Bei mir sind alle Sperrlisten aktiviert. Da muss man so viel nachstellen, dass man etwas sieht, dass es keinen Spaß mehr macht. Bitte überarbeite deine Seite und entferne mindestens Java-Script. Es gibt so viele schlne statische Seiten, welche auch auf OSBN verteilt werden. Schau dir da etwas ab.
Freundliche Grüße. Deine Anleitungen sind gut.
Das ist eine schöne Wortmeldung. Leider müssen wir unser Geld mit Werbung verdienen.
Geld verdienen ist doch erlaubt. Ich bin auch der Meinung, dass die Seite optisch Flickschusterei ist.