Bash Nohup vs Kaufmännisches Und

Dr. Muhammad Abdullah 20 Juni 2023
  1. Führen Sie den Linux-Prozess im Hintergrund aus
  2. das kaufmännische Und (&) Kontrolloperator
  3. der nohup-Befehl
  4. Unterschied zwischen dem Steueroperator & und dem Befehl nohup
Bash Nohup vs Kaufmännisches Und

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.

  1. Verwenden Sie ausschließlich den Steueroperator kaufmännisches Und (&).
  2. 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.

  1. nohup kann das Auflegesignal abfangen (SIGHUP), während & dies nicht kann. Das SIGHUP-Signal wird verwendet, um ein Signal an die Prozesse zu senden, wenn das Terminal geschlossen wird, von dem aus der Prozess gestartet wird.

  2. 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 mit nohup verhindert werden.

    Der nohup-Befehl fängt das SIGHUP-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.

  3. Ein weiterer Unterschied zwischen & und nohup betrifft die Umleitung von stdout/stderr.

    Der Operator & leitet die stdout/stderr nicht automatisch um und zeigt die Ausgabe der Befehle direkt auf dem Terminal an. Allerdings leitet nohup die stdout/stderr in eine Datei nohup.out um, die sich unter $HOME befindet.