Bash Nohup vs Kaufmännisches Und
- Führen Sie den Linux-Prozess im Hintergrund aus
-
das kaufmännische Und (
&
) Kontrolloperator -
der
nohup
-Befehl -
Unterschied zwischen dem Steueroperator
&
und dem Befehlnohup
Dieser kurze Artikel erklärt den Befehl nohup
und den Steueroperator &
, um Linux-Prozesse im Hintergrund über Bash auszuführen. Darüber hinaus werden wir uns weiter mit den Hauptunterschieden zwischen nohup
und dem &
befassen.
Führen Sie den Linux-Prozess im Hintergrund aus
Linux bietet zwei Methoden, um Prozesse oder Befehle im Hintergrund auszuführen.
- Verwenden Sie ausschließlich den Steueroperator kaufmännisches Und (
&
). - Verwenden Sie den Befehl
nohup
in Verbindung mit&
.
das kaufmännische Und (&
) Kontrolloperator
Mit dem Steueroperator &
können wir jeden Befehl asynchron im Hintergrund ausführen.
Betrachten Sie den folgenden Befehl.
sleep 10
Der Befehl sleep
fügt eine Verzögerung um eine bestimmte Zeit hinzu. Wenn wir den Befehl sleep 10
ausführen, wird das Bash-Terminal für 10 Sekunden angehalten, und wir können keinen anderen Befehl auf dem Terminal ausführen.
Betrachten Sie nun den folgenden Befehl.
sleep 10 &
Der obige Befehl zeigt die Prozess-ID (PID
) an und sleep 10
wird asynchron im Hintergrund ausgeführt. Die Ausführungskontrolle kehrt zum Befehlsterminal zurück, ohne auf das Ende von sleep
zu warten.
Jetzt können wir jeden anderen Befehl auf demselben Terminal gleichzeitig mit dem Hintergrundbefehl sleep
ausführen.
Mit dem folgenden Befehl können wir einen Hintergrundprozess in den Vordergrund verschieben.
fg
der nohup
-Befehl
Der Befehl nohup
führt jeden anderen Befehl oder Prozess aus. Es steht für no hang-up
, was verhindert, dass der zugehörige Prozess das SIGHUP
-Signal bekommt.
Wenn Sie einen Befehl auch nach dem Schließen des Terminals ausführen möchten, können Sie nohup CommandName
verwenden.
Wenn wir jedoch einen Befehl im Hintergrund ausführen möchten, wobei die Ausführungskontrolle sofort an das Terminal zurückgegeben wird, müssen wir den folgenden Befehl verwenden.
nohup sleep 10 &
Der obige Befehl führt den Befehl sleep 10
im Hintergrund aus und gibt die Kontrolle sofort zurück, sodass wir jeden anderen Befehl auf demselben Terminal ausführen können.
Wir können die im Hintergrund laufenden Befehle mit dem Befehl pgrep
wie folgt überprüfen:
pgrep -a [Command]
Der Befehl pgrep
sucht nach dem Befehl
und zeigt die Prozess-ID (PID
) zusammen mit den Details des ausgeführten Befehls an.
Zum Beispiel zeigt pgrep -a sleep
den relevanten Hintergrundprozess wie folgt an:
PID sleep 10
Hier stellt PID
die Prozess-ID dar, die dem Befehl sleep
zugewiesen ist.
Unterschied zwischen dem Steueroperator &
und dem Befehl nohup
Im Folgenden sind die wenigen Unterschiede zwischen der Ausführung eines Befehls oder Prozesses im Hintergrund mit &
und nohup
aufgeführt.
-
nohup
kann das Auflegesignal abfangen (SIGHUP
), während&
dies nicht kann. DasSIGHUP
-Signal wird verwendet, um ein Signal an die Prozesse zu senden, wenn das Terminal geschlossen wird, von dem aus der Prozess gestartet wird. -
Typischerweise läuft ein Prozess oder Befehl im Hintergrund mit
&
, bis die Shell existiert, von der aus dieser Befehl oder Prozess gestartet wird. Mit dem Beenden der Shell werden auch alle zugehörigen Befehle oder im Hintergrund laufenden Prozesse mit&
beendet.Wenn ein Terminal beendet wird, beendet ein Auflegesignal mit
SIGHUP (kill SIGHUP <pid>)
alle Unterbefehle oder untergeordneten Prozesse dieses Terminals. Dies kann jedoch mitnohup
verhindert werden.Der
nohup
-Befehl fängt dasSIGHUP
-Signal ab und lässt es nicht zum eigentlichen Befehl gelangen. Daher wird verhindert, dass der Befehl beendet wird, wenn das Bash-Terminal beendet wird. -
Ein weiterer Unterschied zwischen
&
undnohup
betrifft die Umleitung vonstdout/stderr
.Der Operator
&
leitet diestdout/stderr
nicht automatisch um und zeigt die Ausgabe der Befehle direkt auf dem Terminal an. Allerdings leitetnohup
diestdout/stderr
in eine Dateinohup.out
um, die sich unter$HOME
befindet.