Wenn ich zum Beispiel ping 8.8.8.8 &
eingebe , warum können wir sehen, dass der Ping-Prozess funktioniert? Und wenn ich find / -name '*test*' &
eingebe , es ist auch auf dem Monitor zu sehen.
Warum ist das so? Ist es nicht wirklich im Hintergrund?
Beste Antwort
Der &
weist die Shell an, den Befehl im Hintergrund auszuführen, d. h. er wird verzweigt und in einer separaten Sub-Shell als Job asynchron ausgeführt.
Beachten Sie das, wenn Sie &
eingeben die Ausgabe – sowohl stdout als auch stderr – wird weiterhin auf den Bildschirm gedruckt . Wenn Sie keine Ausgabe auf dem Bildschirm sehen möchten, leiten Sie beide stdout
um und stderr
zu einer Datei durch:
myscript > ~/myscript.log 2>&1 &
Normalerweise möchten Sie vielleicht den stderr
verwerfen indem Sie es nach /dev/null
umleiten wenn Sie sich keine Gedanken über die spätere Fehleranalyse machen.
Sie können sogar Befehle/Skripte gleichzeitig in separaten Sub-Shells ausführen. Zum Beispiel;
./script1 & ./script2 & ./script3 &
Ein Hintergrundjob kann mit dem folgenden Befehl auf die Befehlszeile zurückgebracht werden, bevor er beendet wird:
fg <job-number>
Die job-number
kann durch Ausführen von
jobs