Jobs: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „Unter einem Job versteht man ein Programm, welches man von der Shell gelöst hat. D. h. man kann ganz normal weiter arbeiten und der Job verrichtet seinen Dien…“)
 
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Unter einem Job versteht man ein Programm, welches man von der Shell gelöst
+
==Job-Control (Vordergrund / Hintergrund)==
hat. D. h. man kann ganz normal weiter arbeiten und der Job verrichtet seinen
 
Dienst im Hintergrund. Man kann jederzeit zu diesem Job wieder Kontakt
 
aufnehmen.
 
  
Ein Job kann auf 2 Arten gestarten werden:
+
*Ein Job ist ein Programm, das von der Shell gestartet wurde und im Vorder- oder Hintergrund laufen kann.
 +
*Die Shell verwaltet Jobs unabhängig von PIDs.
  
# Durch Anhängen des & Zeichens beim Programmstart
+
==Job im Hintergrund starten==
*tail -f /var/log/messages &
+
*sleep 300 &
Jun 19 06:59:31 zero -- MARK --
 
Jun 19 07:19:31 zero -- MARK --
 
Jun 19 07:39:32 zero -- MARK --
 
Jun 19 07:44:57 zero syslogd 1.5.0#5ubuntu3: restart.
 
Jun 19 07:59:32 zero -- MARK --
 
Jun 19 08:19:32 zero -- MARK --
 
Jun 19 08:39:32 zero -- MARK --
 
Jun 19 08:59:32 zero -- MARK --
 
Jun 19 09:19:33 zero -- MARK --
 
Jun 19 09:39:33 zero -- MARK --
 
[3] 27421
 
  
# Durch Stoppen des Prozesses durch Drücken von Strg-Z und in den Hintergrund schicken mit %n (n ist die Jobnummer)
+
*Die Shell gibt eine Jobnummer und die PID aus
*watch cat /proc/cpuinfo
+
[1] 12345
 +
 
 +
==Aktive Jobs anzeigen==
 +
*jobs
 +
 
 +
==Job anhalten==
 +
*sleep 300
 
  Strg-Z
 
  Strg-Z
  [4]+  Stopped                 watch cat /proc/cpuinfo
+
  [2]+  Stopped sleep 300
*bg %4
+
 
  [4]+ watch cat /proc/cpuinfo &
+
==Job im Hintergrund fortsetzen==
 +
*bg %2
 +
  [2]+ sleep 300 &
 +
 
 +
==Job in den Vordergrund holen==
 +
*fg %2
 +
sleep 300
 +
 
 +
==Jobs beenden==
 +
*kill %2
 +
*kill -9 %2
 +
 
 +
==Typische Job-Zustände==
 +
*Running  Job läuft
 +
*Stopped  Job angehalten (z.B. Strg-Z)
 +
*Done      Job beendet
 +
*Killed    Job durch Signal beendet
 +
 
 +
==Wichtige Regeln==
 +
*Hintergrund-Jobs dürfen keine Benutzereingaben erwarten
 +
*Ausgaben auf den Bildschirm sind möglich, aber störend
 +
*Jobs sind an das Terminal gebunden
 +
 
 +
==Abgrenzung==
 +
*Job ≠ Prozess
 +
*Ein Job kann aus mehreren Prozessen bestehen
 +
*kill arbeitet mit PID oder Jobnummer
 +
*pkill arbeitet mit Prozessnamen
 +
 
 +
==Übungsaufgaben (Job-Control mit Umleitung)==
  
Anweisungen im Zusammenhang mit Jobs (n ist die Jobnummer)
+
===Vorbereitung===
* bg %n : Einen Job in den Hintergrund stellen (wie oben)
+
;Terminal
* fg %n : Einen Job in den Vordergrund holen
+
*ls -lR / > /tmp/ls.log 2>&1 &
* fg %4
 
watch cat /proc/cpuinfo
 
  
* jobs : Aktive Jobs ausgeben
+
;Aufgabe 1
 +
*Starte den Befehl im Hintergrund und zeige ihn mit jobs an
 +
<!-- Lösung:
 +
ls -lR / > /tmp/ls.log 2>&1 &
 +
jobs
 +
-->
  
*jobs
+
;Aufgabe 2
[1]  Running                tail -f /var/log/syslog &
+
*Starte den Befehl im Vordergrund, halte ihn an und setze ihn im Hintergrund fort
[2]  Running                tail -f /var/log/syslog &
+
<!-- Lösung:
[3]- Running                tail -f /var/log/messages &
+
ls -lR / > /tmp/ls.log 2>&1
[4]+  Stopped                watch cat /proc/cpuinfo
+
Strg-Z
 +
bg
 +
-->
 +
 
 +
;Aufgabe 3
 +
*Hole den laufenden Job wieder in den Vordergrund
 +
<!-- Lösung:
 +
fg
 +
-->
  
* Strg-Z : Einen Vordergrund-Job vorübergehend anhalten
+
;Aufgabe 4
* kill -STOP %n : Unterbricht Job im Hintergrund
+
*Beende den Job über seine Jobnummer
* kill -STOP %1
+
<!-- Lösung:
* jobs
+
kill %1
[1]+  '''Stopped'''                tail -f /var/log/syslog
+
oder entsprechende Jobnummer
[2]  Running                tail -f /var/log/syslog &
+
-->
[3]  Running                tail -f /var/log/messages &
 
[4]-  Stopped                watch cat /proc/cpuinfo
 
* kill -CONT %n : Setzt den unterbrochenen Job im Hintergrund fort
 
* kill -CONT %1
 
* jobs
 
[1]+  '''Running'''                tail -f /var/log/syslog &
 
[2]  Running                tail -f /var/log/syslog &
 
[3]  Running                tail -f /var/log/messages &
 
[4]- Stopped                watch cat /proc/cpuinfo
 
* kill -KILL %n : Tötet Job im Hintergrund
 
* kill -KILL %1
 
* jobs
 
[1]+  '''Killed'''                  tail -f /var/log/syslog
 
[2]  Running                tail -f /var/log/syslog &
 
[3]  Running                tail -f /var/log/messages &
 
[4]-  Stopped                watch cat /proc/cpuinfo
 
* jobs
 
[2]  Running                tail -f /var/log/syslog &
 
[3]-  Running                tail -f /var/log/messages &
 
[4]+  Stopped                watch cat /proc/cpuinfo
 
  
Bedingungen, die zu Jobausführung eingehalten werden sollen:
+
;Aufgabe 5
* Der Job soll nicht auf den Bildschirm schreiben (Standardausgabe +Standardfehlerkanal).
+
*Erkläre den Unterschied zwischen Jobnummer und PID anhand dieses Jobs
* Er soll keine Eingaben vom Benutzer erwarten.
+
<!-- Lösung:
 +
Jobnummer: von der Shell vergeben, nur im aktuellen Terminal gültig
 +
PID: vom Kernel vergeben, systemweit eindeutig
 +
-->

Aktuelle Version vom 28. Januar 2026, 05:50 Uhr

Job-Control (Vordergrund / Hintergrund)

  • Ein Job ist ein Programm, das von der Shell gestartet wurde und im Vorder- oder Hintergrund laufen kann.
  • Die Shell verwaltet Jobs unabhängig von PIDs.

Job im Hintergrund starten

  • sleep 300 &
  • Die Shell gibt eine Jobnummer und die PID aus
[1] 12345

Aktive Jobs anzeigen

  • jobs

Job anhalten

  • sleep 300
Strg-Z
[2]+  Stopped  sleep 300

Job im Hintergrund fortsetzen

  • bg %2
[2]+ sleep 300 &

Job in den Vordergrund holen

  • fg %2
sleep 300

Jobs beenden

  • kill %2
  • kill -9 %2

Typische Job-Zustände

  • Running Job läuft
  • Stopped Job angehalten (z.B. Strg-Z)
  • Done Job beendet
  • Killed Job durch Signal beendet

Wichtige Regeln

  • Hintergrund-Jobs dürfen keine Benutzereingaben erwarten
  • Ausgaben auf den Bildschirm sind möglich, aber störend
  • Jobs sind an das Terminal gebunden

Abgrenzung

  • Job ≠ Prozess
  • Ein Job kann aus mehreren Prozessen bestehen
  • kill arbeitet mit PID oder Jobnummer
  • pkill arbeitet mit Prozessnamen

Übungsaufgaben (Job-Control mit Umleitung)

Vorbereitung

Terminal
  • ls -lR / > /tmp/ls.log 2>&1 &
Aufgabe 1
  • Starte den Befehl im Hintergrund und zeige ihn mit jobs an
Aufgabe 2
  • Starte den Befehl im Vordergrund, halte ihn an und setze ihn im Hintergrund fort
Aufgabe 3
  • Hole den laufenden Job wieder in den Vordergrund
Aufgabe 4
  • Beende den Job über seine Jobnummer
Aufgabe 5
  • Erkläre den Unterschied zwischen Jobnummer und PID anhand dieses Jobs