Darüber hinaus können Sie das "&"-Zeichen verwenden, um viele Prozesse über eine (1) ssh-Verbindung auszuführen, um eine minimale Anzahl von Terminals zu erhalten. Zum Beispiel habe ich einen Prozess, der auf Nachrichten wartet, um Dateien zu extrahieren, der zweite Prozess wartet auf Nachrichten, um Dateien hochzuladen:Mit dem "&" kann ich beide Dienste in einem Terminal über eine einzige SSH-Verbindung zu meinem Server ausführen .
Diese Prozesse, die durch das "&" laufen, bleiben auch nach dem Schließen der SSH-Sitzung "am Leben". Ziemlich ordentlich und nützlich, wenn die ssh-Verbindung zum Server unterbrochen ist und kein Terminal-Multiplexer (screen, tmux, byobu) verwendet wurde.
Wenn nichts anderes gesagt wird, übernehmen Befehle den Vordergrund. Sie haben nur einen "Vordergrund"-Prozess, der in einer einzelnen Shell-Sitzung ausgeführt wird. Das Symbol &weist Befehle an, in einem Hintergrundprozess ausgeführt zu werden, und kehrt für weitere Befehle sofort zur Befehlszeile zurück.
sh my_script.sh &
Ein Hintergrundprozess wird nicht am Leben bleiben, nachdem die Shell-Sitzung geschlossen wurde. SIGHUP beendet alle laufenden Prozesse. Standardmäßig sowieso. Wenn Ihr Befehl lange läuft oder unbegrenzt läuft (z. B. Microservice), müssen Sie ihn mit nohup voranstellen, damit er weiter ausgeführt wird, nachdem Sie die Sitzung getrennt haben:
nohup sh my_script.sh &
BEARBEITEN: Es scheint eine Grauzone bezüglich des Schließens von Hintergrundprozessen zu geben, wenn &verwendet wird. Seien Sie sich nur bewusst, dass die Shell darf Schließen Sie Ihren Prozess je nach Betriebssystem und lokalen Konfigurationen (insbesondere auf CENTOS/RHEL):https://serverfault.com/a/117157.
Der &
lässt den Befehl im Hintergrund laufen.
Ab man bash
:
Wenn ein Befehl durch den Kontrolloperator & beendet wird , führt die Shell den Befehl im Hintergrund in einer Subshell aus. Die Shell wartet nicht auf das Ende des Befehls, und der Rückgabestatus ist 0.