![& zum Ausführen eines Befehls im Hintergrund](https://rvso.com/image/154486/%26%20zum%20Ausf%C3%BChren%20eines%20Befehls%20im%20Hintergrund%20.png)
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 ls
sind 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/null
zu vermeiden, dass sie an das Terminal gestreamt wird:
ls -R / >/dev/null 2>&1 &
Die Folgefrage ist: „Warum wird es mir angezeigt, Exit 1
wenn ich den Status des Auftrags mit überprüfe jobs -l
?“
Sie erhalten einen Exit-Status ungleich Null, ls
weil 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>&1
aus der Befehlszeile), hätten Sie wahrscheinlich Fehler im Terminal gesehen.