Linux fg-Befehl
Vollständige Liste der Linux-Befehle
fgEs ist ein wichtiger Befehl zur Prozesssteuerung in Linux/Unix-Systemen, mit dem vollständigen Namen "foreground". Seine Hauptfunktion besteht darin, im Hintergrund laufende Jobs in den Vordergrund zu holen, um die Ausführung fortzusetzen.
Warum benötigen Sie den fg-Befehl
Stellen Sie sich vor, Sie bestellen in einem Restaurant:
- Sie bestellen einen Hauptgang (Vordergrundprozess)
- Gleichzeitig lassen Sie die Küche einen Nachtisch zubereiten (Hintergrundprozess)
- Wenn Sie den Hauptgang beendet haben, können Sie den Kellner bitten, Ihnen den Nachtisch zu bringen (fg-Befehl)
In Linux ermöglicht Ihnen dieser Mechanismus zum Wechseln zwischen Vordergrund- und Hintergrund-Jobs:
- Die Ausführungsreihenfolge mehrerer Aufgaben flexibel steuern
- Die aktuelle Aufgabe vorübergehend aussetzen, um dringendere Angelegenheiten zu bearbeiten
- Terminalsitzungen effizient nutzen
Grundlegende Syntax
fg [作业标识]
Parameterbeschreibung
| Parameter | Beschreibung |
|---|---|
| Kein Parameter | Den zuletzt in den Hintergrund gestellten Job fortsetzen |
| %n | Den Job mit der Jobnummer n fortsetzen |
| %str | Den Job fortsetzen, der mit str beginnt |
| %?str | Den Job fortsetzen, der str enthält |
| %+ oder %% | Entspricht keiner Parameterangabe; setzt den zuletzt ausgeführten Job fort |
| %- | Den vorletzten in den Hintergrund gestellten Job fortsetzen |
Anwendungsbeispiele
Beispiel 1: Grundlegende Verwendung
Eine lang andauernde Aufgabe starten und im Hintergrund ausführen:
sleep 60 & [1] 12345 # 系统返回作业号 [1] 和进程ID 12345
Die aktuelle Jobliste anzeigen:
jobs [1]+ 运行中 sleep 60 &
Den Job wieder in den Vordergrund holen:
fg %1 # 或者简写为 fg
Beispiel 2: Einen bestimmten Job fortsetzen
Beispiel
python script1.py &
python script2.py &
# Jobliste anzeigen
jobs
[1]- Running python script1.py&
[2]+ Running python script2.py&
# Den ersten Job fortsetzen
fg %1
Funktionsweise
Prozesszustandsübergang
Beispiel
A[Vordergrundausführung] -->|Ctrl+Z| B[Angehalten]
B -->|fg| A
B -->|bg| C[Hintergrundausführung]
C -->|fg| A
- Vordergrundprozess: Belegt das Terminal, empfängt Tastatureingaben
- Hintergrundprozess: Belegt das Terminal nicht, kann keine Eingaben empfangen
- Angehaltener Prozess: Ist angehalten, wartet darauf, fortgesetzt zu werden
Signalmechanismus
Bei der Ausführungfg:
- Das System sendet an den Job
SIGCONTSignal (Ausführung fortsetzen) - Die Prozessgruppe des Jobs als Vordergrund-Prozessgruppe des Terminals festlegen
- Das Terminal leitet Eingabe/Ausgabe an den Prozess um
FAQ
Frage 1: Wie finde ich heraus, welche Hintergrundjobs derzeit existieren?
Verwenden SiejobsBefehl zum Anzeigen:
Beispiel
Beispielausgabe:
[1]- 12345 运行中 sleep 100 & [2]+ 12346 停止 vim file.txt
Frage 2: Was ist der Unterschied zwischen fg und bg?
| Befehl | Funktion | Terminalsteuerung |
|---|---|---|
| fg | Den Job in den Vordergrund bringen | Belegt das Terminal |
| bg | Den angehaltenen Job im Hintergrund weiterlaufen lassen | Belegt das Terminal nicht |
Frage 3: Warum kann das Programm nach fg keine Eingabe empfangen?
Möglicherweise ist das Programm angehalten (angezeigt als "stopped"); Sie müssen zuerst ein Continue-Signal senden:
Beispiel
fg %1
Praktische Anwendungsszenarien
Szenario 1: Entwicklung und Debugging
>Starten Sie den Entwicklungsserver:
Beispiel
# Drücken Sie Ctrl+Z, um anzuhalten
[1]+ Stopped python manage.py runserver
Vorübergehend andere Befehle ausführen
Den Server fortsetzen:
Beispiel
Szenario 2: Dateibearbeitung
Beispiel
# Drücken Sie Ctrl+Z, um die Bearbeitung anzuhalten
# Dateiinhalt anzeigen
cat related_file.txt
# Zurück zur Bearbeitung
fg
Hinweise
- Terminalzuordnung: Hintergrundjobs sind mit dem Terminal verbunden, das sie gestartet hat; das Schließen des Terminals beendet die Jobs
- Störung durch Ausgaben: Ausgaben von Hintergrundjobs können plötzlich im Vordergrund erscheinen und die aktuelle Arbeit stören
- Berechtigungseinschränkungen: Einige Programme, die Terminalinteraktion erfordern (wie z. B. Passworteingabe), können nicht im Hintergrund ausgeführt werden
- Wiederverwendung von Jobnummern: Jobnummern sind innerhalb einer Sitzung eindeutig, aber verschiedene Terminalsitzungen werden unabhängig gezählt
Fortgeschrittene Tipps
Verwendung mit nohup
Job dauerhaft im Hintergrund laufen lassen (auch wenn Sie das Terminal beenden):
Beispiel
# Sie können sich später erneut verbinden und fortsetzen
fg %1
Verwendung von disown zum Abtrennen
Beispiel
jobs -l # Notieren Sie die Jobnummer
disown %1 # Vom Terminal abkoppeln
# Jetzt können Sie das Terminal sicher schließen