Ich bin Systemadministrator und wurde gebeten, ein Linux-Skript auszuführen, um das System zu bereinigen.
Der Befehl lautet:
perl script.pl > output.log &
Dieser Befehl endet also mit einem &
Zeichen. Gibt es eine besondere Bedeutung dafür?
Ich habe Grundkenntnisse in Shell, aber ich habe das noch nie gesehen.
&
und suchen&&
:&
führt den ersten Befehl im Hintergrund aus;&&
führt den ersten Befehl aus und fährt bedingt mit dem zweiten fort, wenn er erfolgreich beendet wird.Antworten:
Das
&
macht den Befehl im Hintergrund ausgeführt werden .Von
man bash
:quelle
Darüber hinaus können Sie das "&" -Zeichen verwenden, um viele Prozesse über eine (1) SSH-Verbindung auszuführen, um die Mindestanzahl von Terminals beizubehalten. Zum Beispiel habe ich einen Prozess, der auf Nachrichten wartet, um Dateien zu extrahieren, den zweiten Prozess, der auf Nachrichten wartet, 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 das "&" durchlaufen, auch nach Abschluss der SSH-Sitzung "am Leben bleiben"! ziemlich ordentlich und nützlich, wenn Ihre Verbindung zum Server unterbrochen wird **
quelle
nohup
wird auch Prozesse am Leben erhalten.Wenn nicht anders angegeben, übernehmen Befehle den Vordergrund. In einer einzelnen Shell-Sitzung wird nur ein "Vordergrund" -Prozess ausgeführt. Das Symbol & weist Befehle an, in einem Hintergrundprozess ausgeführt zu werden, und kehrt sofort zur Befehlszeile zurück, um weitere Befehle zu erhalten.
Ein Hintergrundprozess wird nicht am Leben bleiben , nachdem die Shell - Sitzung geschlossen wird. SIGHUP beendet alle laufenden Prozesse. Standardmäßig sowieso. Wenn Ihr Befehl lange ausgeführt wird oder auf unbestimmte Zeit ausgeführt wird (z. B. Microservice), müssen Sie ihn mit nohup vorhängen, damit er nach dem Trennen von der Sitzung weiterhin ausgeführt wird:
BEARBEITEN: Es scheint eine Grauzone bezüglich des Schließens von Hintergrundprozessen zu geben, wenn & verwendet wird. Beachten Sie jedoch, dass die Shell Ihren Prozess je nach Betriebssystem und lokalen Konfigurationen (insbesondere unter CENTOS / RHEL) möglicherweise schließt: https://serverfault.com/a/117157 .
quelle
Ich weiß es nicht genau, aber ich lese gerade ein Buch und bekomme, dass ein Programm sein Signal verarbeiten muss (wie wenn ich drücke
CTRL-C
). Jetzt kann ein ProgrammSIG_IGN
alle Signale ignorieren oderSIG_DFL
die Standardaktion wiederherstellen.Wenn Sie dies tun,
$ command &
ignoriert dieser Prozess, der als Hintergrundprozess ausgeführt wird, einfach alle Signale, die auftreten werden. Bei Vordergrundprozessen werden diese Signale nicht ignoriert.quelle