& zum Ausführen eines Befehls im Hintergrund

& zum Ausführen eines Befehls im Hintergrund

wenn ich laufe

$ ls -R / & 

obwohl das &(was den Prozess in den Hintergrund verbannen soll) dazu führt, dass ich mir die gesamte Auflistung meines Systems anschauen muss. Das Drücken von STRG+C oder STRG+Z hilft nicht. Was mache ich falsch?

Antwort1

Wenn Sie ls -R /im Hintergrund starten, wird der Befehl sofort ausgeführt und die Kontrolle wird an die aufrufende Shell (Ihre interaktive Shell) zurückgegeben. Der Standardausgabestream und der Standardfehlerstream lssind jedoch weiterhin mit dem Terminal verbunden, weshalb Sie die Ausgabe des Befehls im Terminal sehen.

In KommentarenSie stellen eine Folgefrage, die zeigt, dass Sie wissen, dass Sie die Ausgabe des Befehls umleiten können, um /dev/nullzu vermeiden, dass sie an das Terminal gestreamt wird:

ls -R / >/dev/null 2>&1 &

Die Folgefrage ist: „Warum wird es mir angezeigt, Exit 1wenn ich den Status des Auftrags mit überprüfe jobs -l?“

Sie erhalten einen Exit-Status ungleich Null, lsweil der Befehl nicht vollständig erfolgreich ausgeführt wurde. Dies ist nicht der Fall, weil Sie versucht haben, eine rekursive Auflistung aller Dateien auf dem gesamten System zu erstellen, und vermutlich sind einige der Verzeichnisse auf Ihren Systemen für den Benutzer, mit dem Sie den Befehl ausgeführt haben, nicht lesbar. Wenn Sie den Standardfehlerstrom nicht umgeleitet hätten /dev/null(durch Entfernen 2>&1aus der Befehlszeile), hätten Sie wahrscheinlich Fehler im Terminal gesehen.

verwandte Informationen