Warum einen Linux-Shell-Befehl mit '&' ausführen?
So erhalten Sie Ihre Aufforderung umgehend zurück und führen den Prozess im Hintergrund aus.
Welche Funktion haben sie?
Mit nohup kann der Hintergrundprozess fortgesetzt werden, auch nachdem sich der Benutzer abgemeldet hat (oder die initiierende Shell beendet hat).
> & Leitet sowohl die Standardausgabe als auch den Standardfehler in die Protokolldatei um.
& führt das Ganze im Hintergrund aus und gibt Ihnen umgehend eine Rückmeldung.
Erläuterung:
Jeder Linux-Prozess öffnet drei E / A-Kanäle, einen Eingang "stdin", einen Standardausgang "stdout" und einen Standardfehlerausgang "stderr". Sie können für Binärdateien verwendet werden, sind jedoch traditionell Text. Wenn die meisten Programme stdin schließen, werden sie beendet (dies kann vom Programmierer geändert werden).
Wenn die übergeordnete Shell beendet wird, ist stdin für die Kinder geschlossen, und (häufig, normalerweise) werden auch die Kinder beendet. Außerdem erhalten die Kinder das Softwaresignal SIGHUP, das angibt, dass der Benutzer (früher das Modem) "aufgelegt" hat und standardmäßig auch beendet wird. (Beachten Sie, dass ein Programmierer all dies ändern kann, wenn er das Programm schreibt.)
Was nohup also tut, ist, dem Kindprozess eine separate E / A-Umgebung zu geben, die die Ein- und Ausgänge mit etwas verknüpft, das nicht mit der Eltern-Shell verbunden ist, und das Kind vor dem Signal SIGHUP abzuschirmen. Sobald der Benutzer die Verbindung trennt, wird der Nohup-Hintergrundprozess von init (Prozess 1) angezeigt, nicht die Shell des Benutzers.
nohup
Kann den Job jedoch nicht vollständig ausführen, wenn der Prozess im Vordergrund ausgeführt wird. Wird daher &
verwendet, um das Programm im Hintergrund auszuführen, wo es problemlos mit oder ohne angemeldeten Benutzer ausgeführt werden kann.