Jobs: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 1: Zeile 1:
*Unter einem Job versteht man ein Programm, welches man von der Shell gelöst hat.
+
==Job-Control (Vordergrund / Hintergrund)==
*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:
 
  
# Durch Anhängen des & Zeichens beim Programmstart
+
*Ein Job ist ein Programm, das von der Shell gestartet wurde und im Vorder- oder Hintergrund laufen kann.
*tail -f /var/log/messages &
+
*Die Shell verwaltet Jobs unabhängig von PIDs.
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)
+
==Job im Hintergrund starten==
*watch cat /proc/cpuinfo
+
*sleep 300 &
 +
 
 +
*Die Shell gibt eine Jobnummer und die PID aus
 +
[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 &
 
  
Anweisungen im Zusammenhang mit Jobs (n ist die Jobnummer)
+
==Job im Hintergrund fortsetzen==
* bg %n : Einen Job in den Hintergrund stellen (wie oben)
+
*bg %2
* fg %n : Einen Job in den Vordergrund holen
+
  [2]+ sleep 300 &
* fg %4
 
  watch cat /proc/cpuinfo
 
  
* jobs : Aktive Jobs ausgeben
+
==Job in den Vordergrund holen==
 +
*fg %2
 +
sleep 300
  
*jobs
+
==Jobs beenden==
[1]   Running                tail -f /var/log/syslog &
+
*kill %2
[2]  Running                tail -f /var/log/syslog &
+
*kill -9 %2
[3]- Running                tail -f /var/log/messages &
+
 
[4]+  Stopped                watch cat /proc/cpuinfo
+
==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
 +
<!-- Lösung:
 +
ls -lR / > /tmp/ls.log 2>&1 &
 +
jobs
 +
-->
 +
 
 +
;Aufgabe 2
 +
*Starte den Befehl im Vordergrund, halte ihn an und setze ihn im Hintergrund fort
 +
<!-- Lösung:
 +
ls -lR / > /tmp/ls.log 2>&1
 +
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