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