it-swarm.com.de

Was bedeutet "&" am Ende eines Linuxbefehls?

Ich bin ein Systemadministrator und wurde gebeten, ein Linux-Skript auszuführen, um das System zu reinigen.

Der Befehl lautet wie folgt:

Perl script.pl > output.log &

dieser Befehl endet also mit einem &-Zeichen. Gibt es eine besondere Bedeutung?

Ich habe Grundkenntnisse in Shell, habe dies aber noch nie gesehen.

64
Dude

Der & bewirkt, dass der Befehl im Hintergrund ausgeführt wird.

Von man bash:

Wenn ein Befehl vom Steuerelementoperator & beendet wird, wird die Shell führt den Befehl im Hintergrund in einer Subshell aus. Die Shell tut Warten Sie nicht, bis der Befehl abgeschlossen ist, und Der Rückgabestatus ist 0.

110
mgarciaisaia

Darüber hinaus können Sie das "&" - Zeichen verwenden, um viele Prozesse über eine (1) ssh-Verbindung auszuführen, um die Anzahl der Terminals möglichst gering zu halten. Ich habe zum Beispiel einen Prozess, der auf Nachrichten wartet, um Dateien zu extrahieren, der zweite Prozess auf Nachrichten, um Dateien hochzuladen: Mit dem "&" kann ich beide Dienste in einem Terminal über eine einzige SSH-Verbindung zu meinem Server ausführen .


***** Ich habe gerade festgestellt, dass diese Prozesse, die durch das "&" laufen, auch nach dem Schließen der ssh-Sitzung "am Leben bleiben" werden! ziemlich ordentlich und nützlich, wenn Ihre Verbindung zum Server unterbrochen wird ** 

10
Zack S

Wenn nicht anders gesagt, übernehmen Befehle den Vordergrund. In einer einzigen Shell-Sitzung wird nur ein Prozess für den Vordergrund ausgeführt. Das Symbol & weist die Befehle an, im Hintergrund zu arbeiten, und kehrt für zusätzliche Befehle sofort zur Befehlszeile zurück.

sh my_script.sh &

Ein Hintergrundprozess bleibt nicht lebend, nachdem die Shell-Sitzung geschlossen wurde. SIGHUP beendet alle laufenden Prozesse. Standardmäßig sowieso. Wenn Ihr Befehl lange läuft oder unbegrenzt ausgeführt wird (z. B. microservice), müssen Sie ihn mit Nohup vorbelegen, damit er nach dem Trennen der Sitzung weiterhin ausgeführt wird:

Nohup sh my_script.sh &

EDIT: Es scheint einen grauen Bereich für das Schließen von Hintergrundprozessen zu geben, wenn & verwendet wird. Beachten Sie nur, dass die Shell möglicherweise Ihren Prozess abhängig von Ihrem Betriebssystem und Ihren lokalen Konfigurationen (insbesondere von CENTOS/RHEL) schließt: https://serverfault.com/a/117157 .

4
Timothy Jannace

Ich weiß es nicht genau, aber ich lese gerade ein Buch, und was ich bekomme, ist, dass ein Programm sein Signal verarbeiten muss (wenn ich beispielsweise STRG-C drücke). Jetzt kann ein Programm SIG_IGN verwenden, um alle Signale zu ignorieren, oder SIG_DFL, um die Standardaktion wiederherzustellen. Wenn Sie nun den $ -Befehl & .__ ausführen, ignoriert dieser als Hintergrundprozess ausgeführte Prozess einfach alle Signale, die auftreten werden. Bei Vordergrundprozessen werden diese Signale nicht ignoriert.

0
Kaustubh Kislay