Ich weiß wirklich nicht, welche Vorteile es hat, Anwendungen im Hintergrund laufen zu lassen.
So etwas wie Application &
über die Befehlszeile.
Warum genau führen wir Anwendungen im Hintergrund aus und wann sollte ich mich dazu entschließen?
Antwort1
Im Allgemeinen werden Anwendungen, deren Ausführung zu lange dauert und keine Benutzerinteraktion erfordert, in den Hintergrund verschoben, damit wir unsere Arbeit im Terminal fortsetzen können.
Im Hintergrund laufende Jobs werden genauso behandelt wie im Vordergrund laufende Jobs, mit der Ausnahme, dass ihre STDOUT-, STDIN- und STDERR-Werte variieren.
Wenn Sie einen Job haben, der zu lange dauert, wie etwa eine Dateikomprimierung oder eine Sicherung, können Sie diese Jobs in den Hintergrund senden.
Sie können die im Hintergrund laufenden Jobs mit jobs
einem Befehl auflisten.
$ ./job1.sh &
[1] 9747
$ ./job2.sh &
[2] 9749
$ ./job3.sh &
[3] 9751
$ jobs
[1] Running ./job1.sh &
[2]- Running ./job2.sh &
[3]+ Running ./job3.sh &
Wenn hier ein Job an die Hintergrundshell gesendet wird, wird das job id
Ende pid
des Prozesses angezeigt. Wenn wir möchten, dass der Prozess wieder in den Vordergrund kommt, können wir fg
ihn mit einem Befehl zurückholen.
$ fg 1
./job1.sh
Beachten Sie jedoch, dass beim Schließen des Terminals (der Shell) SIGHUP an alle Hintergrundprozesse gesendet wird, die von der Shell gestartet werden, wodurch diese Prozesse beendet werden. Um dies zu verhindern, können Sie disown
diese Prozesse mit einem Befehl aus der Jobtabelle entfernen und so verhindern, dass der Prozess beendet wird.
Eine der besten Möglichkeiten besteht darin, den Hintergrundprozess mit nohup
einem Befehl zu starten, sodass SIGHUP-Signale den Prozess nicht beenden und er sicher im Hintergrund ausgeführt wird.
Das Senden von SIGHUP an untergeordnete Prozesse (BG-Jobs) kann auch durch Festlegen huponexit
einer Option der Bash-Shell verhindert werden.
$ shopt -s huponexit
Diese Option ist in den neuesten Versionen von Bash standardmäßig festgelegt. Falls sie jedoch nicht festgelegt ist, können wir sie hinzufügen, ~/.bashrc
um sie zu einem Standardverhalten zu machen.
Antwort2
Wenn Sie eine Anwendung ausführen, die beispielsweise 5 Minuten zum Beenden benötigt, beispielsweise einen Kopierauftrag, ist die Shell während der Ausführung des Programms für die gesamten 5 Minuten blockiert. Der Kopierauftrag befindet sich dann in der sogenannten Vordergrundprozessgruppe, gekennzeichnet durch ein +
Zeichen in ps
. Möglicherweise müssen Sie während dieser 5 Minuten andere Arbeiten ausführen, aber die Shell ist blockiert.
Wenn Sie den Kopierauftrag hingegen im Hintergrund ausführen ( cp source target &
), wird Ihr Auftrag im Hintergrund ausgeführt, ohne die aktuelle Shell zu blockieren. Sie können mit anderen Dingen fortfahren. Sie können den Vorgang mit wieder in den Vordergrund holen, fg
wenn Sie möchten.