
Ist es möglich, eine vom Terminal gestartete Aufgabe oder ein Skript im Hintergrund auszuführen?
Antwort1
Hier gibt es mehrere Antworten, je nachdem, was Sie möchten (diese Antwort ist in bash
und zsh
Shells gültig, andere können abweichen).
Wenn Sie einen Befehl im Hintergrund ausführen müssen und dies vor der Ausführung wissen, fügen Sie &
am Ende des Befehls einfach ein hinzu (verwenden Sie sleep 60
als Beispielbefehl , tun Sie 1 Minute lang nichts):
[romano:~] % sleep 60 &
[1] 9054
1& [romano:~] %
Wenn Sie es bereits ausgeführt haben, können Sie es mit ctrl- stoppen Z, und wenn die Shell Ihnen eine Eingabeaufforderung anzeigt, können Sie es mit dem folgenden Befehl in den Hintergrund stellen bg
:
1& [romano:~] % sleep 60
^Z
[1] + 9084 suspended sleep 60
1z [romano:~] 20 % bg
[1] + 9084 continued sleep 60
1& [romano:~] %
In beiden Fällen ist der Prozess/Job immer noch an Ihr Terminal angehängt. Wenn Sie Ihr Terminal schließen,auflegen(HUP)-Signal wird an den Prozess gesendet --- die meisten Prozesse werden dann ordnungsgemäß beendet. Wenn Sie sicherstellen müssen, dass der Prozess fortgesetzt wird, können Sie ihn folgendermaßen starten:
nohup sleep 60 &
bg
oder, nachdem Sie es mit oder mit einem einfachen in den Hintergrund geschickt haben &
, sagen Sie der Shell, dass sie es vergessen soll, mit:
disown %%
( %%
ist einJobkontrolleVerknüpfung und steht hier für den letzten im Hintergrund gesendeten Prozess).
Dann müssen Sie die Ausgabe des Prozesses berücksichtigen --- in den ersten beiden Fällen wird die Ausgabe immer noch auf dem Terminal ankommen; im Fall von nohup
wird sie auf eine Datei namens umgeleitet nohup.out
, und im letzteren Fall (mit disown
) wird sie auf das Terminal gesendet, sofern Sie es nicht schließen. In diesem Fall ist das Verhalten völlig undefiniert. Es ist eine gute Praxis, sich selbst um die Ausgabe eines Hintergrundprozesses zu kümmern, indem SieUmleitung.
Antwort2
&
zum Befehl hinzufügen .
Beispiel:
$ cp FromA ToB &
Antwort3
In diesem Beispiel werden Updates im Hintergrund ausgeführt:
sudo apt-get dist-upgrade -y &
Beachten Sie einfach das einzelne &.
Wenn Sie die Standardausgabe verbergen möchten, gehen Sie wie folgt vor:
sudo apt-get dist-upgrade -y > /dev/null &
Antwort4
Wenn Sie es fortgeschrittener möchten und die Sitzung später lokal oder per SSH verwenden möchten, können Sie screen verwenden.
# screen
# apt-get update -y
Drücken Sie dann CTRL+ Aund anschließend D.
Später können Sie Folgendes erneut anhängen:
# screen -rd