Bash/Jobkontrolle: Unterschied zwischen den Versionen

Aus Foxwiki
Die Seite wurde neu angelegt: „== Jobkontrolle == * fg, bg und jobs sind Befehle für die interne Jobkontrolle der Bash. * Ein laufendes Programm kann mit [Strg] + [Z] in den Hintergrund verschoben werden; dort wird es zunächst angehalten ("suspend"). * Das Kommando jobs gibt eine Liste aller derzeit im Hintergrund schlafenden Programme aus. * Dabei wird für jedes Programm die interne Jobnummer angegeben. * Es ist wichtig anzumerken, dass die vergebene Jobnummer in keinem Zusamme…“
 
Keine Bearbeitungszusammenfassung
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
== Jobkontrolle ==
== Beschreibung ==
* fg, bg und jobs sind Befehle für die interne Jobkontrolle der Bash.
[[fg]], [[bg]] und [[jobs]] sind Befehle für die interne Jobkontrolle der Bash
* Ein laufendes Programm kann mit [Strg] + [Z] in den Hintergrund verschoben werden; dort wird es zunächst angehalten ("suspend").
* Ein laufendes Programm kann mit [Strg] + [Z] in den Hintergrund verschoben werden
* dort wird es zunächst angehalten ("suspend")
* Das Kommando jobs gibt eine Liste aller derzeit im Hintergrund schlafenden Programme aus.  
* Das Kommando jobs gibt eine Liste aller derzeit im Hintergrund schlafenden Programme aus.  
* Dabei wird für jedes Programm die interne Jobnummer angegeben.  
* Dabei wird für jedes Programm die interne Jobnummer angegeben.  
* Es ist wichtig anzumerken, dass die vergebene Jobnummer in keinem Zusammenhang zu der - etwa von ps - angezeigten Prozessnummer steht.  
* Es ist wichtig anzumerken, dass die vergebene Jobnummer in keinem Zusammenhang zu der - etwa von ps - angezeigten Prozessnummer steht.  
* Mit fg Jobnummer holen Sie diese Task wieder in den Vordergrund.  
* Mit fg Jobnummer holen Sie diese Tasks wieder in den Vordergrund.  
* Soll ein angehaltenes Kommando dagegen im Hintergrund weiterlaufen, verwendet man den Befehl bg Jobnummer.  
* Soll ein angehaltenes Kommando dagegen im Hintergrund weiterlaufen, verwendet man den Befehl bg Jobnummer.  


=== Prozess im Hintergrund weiterlaufen lassen (bg) ===
== Prozess im Hintergrund weiterlaufen lassen (bg) ==
  $ bg [job_spec]
  $ bg [job_spec]


Das Kommando lässt einen zuvor gestoppten Prozess im Hintergrund weiterlaufen. Die Ausführung eines Prozesses wird durch Senden des Signals 19 (SIGSTOP) gestoppt. Befinden sich mehrere Prozesse im Zustand "Stopp", kann der gewünschte Prozess über seine Jobnummer angesprochen werden (siehe jobs).
Das Kommando lässt einen zuvor gestoppten Prozess im Hintergrund weiterlaufen.  
* Die Ausführung eines Prozesses wird durch Senden des Signals 19 (SIGSTOP) gestoppt.  
* Befinden sich mehrere Prozesse im Zustand "Stopp", kann der gewünschte Prozess über seine Jobnummer angesprochen werden (siehe [[jobs]]).


=== Beispiel ===
== Beispiel ==
  $ ls -l > fifo
  $ ls -l > fifo
  ^z
  ^z
Zeile 22: Zeile 25:
Die Eingabe von [Strg]+[Z] bewirkt in der Bash das Senden des Signals '''SIGSTOP''' an den aktiven Prozess.
Die Eingabe von [Strg]+[Z] bewirkt in der Bash das Senden des Signals '''SIGSTOP''' an den aktiven Prozess.


=== Hintergrundprozess in den Vordergrund holen (fg) ===
== Hintergrundprozess in den Vordergrund holen (fg) ==
  $ fg [job_spec]  
  $ fg [job_spec]  


Zeile 35: Zeile 38:
  fg %2  
  fg %2  


=== Anzeige aktiver Jobs (jobs) ===
== Anzeige aktiver Jobs (jobs) ==
  jobs [-lnprs] [jobspec ...]  
  jobs [-lnprs] [jobspec ...]  


Mit dem Kommando lassen sich alle Hintergrundprozesse ("Jobs") der aktiven Shell anzeigen.
Mit dem Kommando lassen sich alle Hintergrundprozesse ("Jobs") der aktiven Shell anzeigen.


==== Optionen ====
=== Optionen ===
{|  
{| class="wikitable sortable options"
|-
|-
! Option !! Beschreibung
|  | '''-l'''
|  | '''-l'''
|  | Zusätzliche Anzeige der PID
|  | Zusätzliche Anzeige der PID
Zeile 60: Zeile 64:
|}
|}


=== Beispiel ===
== Beispiel ==
  $ sleep 100&
  $ sleep 100&
  [1] 1177
  [1] 1177
Zeile 68: Zeile 72:
  [1] 1177  
  [1] 1177  


=== Verzögerte Ausgabe (sleep) ===
== Verzögerte Ausgabe (sleep) ==
  '''sleep''' ''Zeit'' [smhd] ...
  '''sleep''' ''Zeit'' [smhd] ...


Zeile 75: Zeile 79:
Diese Funktion wird vor allem in Shellscripts zur vorübergehenden Anzeige von Informationen benutzt.  
Diese Funktion wird vor allem in Shellscripts zur vorübergehenden Anzeige von Informationen benutzt.  


=== Optionen ===
== Optionen ==
{|  
{| class="wikitable sortable options"
|-
|-
! Option !! Beschreibung
|  | '''s '''
|  | '''s '''
|  | Sekunden  
|  | Sekunden  
Zeile 94: Zeile 99:
Prozesse, die ihren Status wechseln, quittieren dies mit einer Ausgabe. Wie mit jeder Ausgabe verfahren wird, ist konfigurierbar.  
Prozesse, die ihren Status wechseln, quittieren dies mit einer Ausgabe. Wie mit jeder Ausgabe verfahren wird, ist konfigurierbar.  


=== Benachrichtigung über Statuswechsel ===
== Benachrichtigung über Statuswechsel ==
Vor Anzeige der neuen Eingabeaufforderung
Vor Anzeige der neuen Eingabeaufforderung
  $'''(sleep 1; echo foo)&'''
  $'''(sleep 1; echo foo)&'''
Zeile 111: Zeile 116:
  '''foo'''
  '''foo'''
  [1]+  Done                    (sleep 1; echo foo)
  [1]+  Done                    (sleep 1; echo foo)
[[Kategorie:Bash]]

Aktuelle Version vom 16. April 2023, 08:51 Uhr

Beschreibung

fg, bg und jobs sind Befehle für die interne Jobkontrolle der Bash

  • Ein laufendes Programm kann mit [Strg] + [Z] in den Hintergrund verschoben werden
  • dort wird es zunächst angehalten ("suspend")
  • Das Kommando jobs gibt eine Liste aller derzeit im Hintergrund schlafenden Programme aus.
  • Dabei wird für jedes Programm die interne Jobnummer angegeben.
  • Es ist wichtig anzumerken, dass die vergebene Jobnummer in keinem Zusammenhang zu der - etwa von ps - angezeigten Prozessnummer steht.
  • Mit fg Jobnummer holen Sie diese Tasks wieder in den Vordergrund.
  • Soll ein angehaltenes Kommando dagegen im Hintergrund weiterlaufen, verwendet man den Befehl bg Jobnummer.

Prozess im Hintergrund weiterlaufen lassen (bg)

$ bg [job_spec]

Das Kommando lässt einen zuvor gestoppten Prozess im Hintergrund weiterlaufen.

  • Die Ausführung eines Prozesses wird durch Senden des Signals 19 (SIGSTOP) gestoppt.
  • Befinden sich mehrere Prozesse im Zustand "Stopp", kann der gewünschte Prozess über seine Jobnummer angesprochen werden (siehe jobs).

Beispiel

$ ls -l > fifo
^z
[1]+  Stopped                 ls --color=tty -l >fifo
bg
[1]+ ls --color=tty -l >fifo &

Die Eingabe von [Strg]+[Z] bewirkt in der Bash das Senden des Signals SIGSTOP an den aktiven Prozess.

Hintergrundprozess in den Vordergrund holen (fg)

$ fg [job_spec] 

Ein im Hintergrund laufender Prozess kann in den Vordergrund geholt werden.

Soll nicht gerade der zuletzt im Hintergrund gestartet Prozess gewählt werden, ist die Angabe der Jobnummer erforderlich, die man mit dem Kommando jobs ermitteln kann.

Beispiel
$ sleep 100& sleep 500&
[1] 1177
[2] 1178
fg %2 

Anzeige aktiver Jobs (jobs)

jobs [-lnprs] [jobspec ...] 

Mit dem Kommando lassen sich alle Hintergrundprozesse ("Jobs") der aktiven Shell anzeigen.

Optionen

Option Beschreibung -l Zusätzliche Anzeige der PID
-n Nur Prozesse anzeigen, deren Status sich seit dem letzten Aufruf von jobs geändert hat
-p Nur die PIDs anzeigen
-r Nur aktive Prozesse anzeigen
-s Nur gestoppte Prozesse anzeigen

Beispiel

$ sleep 100&
[1] 1177
jobs
[1]+ Running                 sleep 10000 &
$ jobs -n
[1] 1177 

Verzögerte Ausgabe (sleep)

sleep Zeit [smhd] ...

sleep wartet, dass die Zeit verstreicht. Voreingestellt sind Sekunden, es können aber auch Minuten, Stunden oder Tage sein.

Diese Funktion wird vor allem in Shellscripts zur vorübergehenden Anzeige von Informationen benutzt.

Optionen

Option Beschreibung s Sekunden
m Minuten
h Stunden
d Tage

Prozesse, die ihren Status wechseln, quittieren dies mit einer Ausgabe. Wie mit jeder Ausgabe verfahren wird, ist konfigurierbar.

Benachrichtigung über Statuswechsel

Vor Anzeige der neuen Eingabeaufforderung

$(sleep 1; echo foo)&
[1] 1372
foo
[Enter]

[1]+  Done                    (sleep 1; echo foo)

Durch diese Verzögerung "platzt" der Statusbericht nicht in die Ausgabe des aktuellen Vordergrundprozesses hinein.

  • Gesteuert wird das Verhalten durch die Shelloption notify (Kommando set).
  • Ist diese Option aktiviert (on), so erreicht uns die Statusmeldung sofort:
$set -o notify (sleep 1; echo foo)&
[1] 1376
foo
[1]+  Done                    (sleep 1; echo foo)