GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So starten Sie den Linux-Befehl im Hintergrund und trennen den Prozess im Terminal

In diesem Leitfaden werden wir ein einfaches, aber wichtiges Konzept der Prozessverarbeitung in einem Linux-System ans Licht bringen, nämlich die vollständige Trennung eines Prozesses von seinem steuernden Terminal.

Wenn ein Prozess einem Terminal zugeordnet ist, können zwei Probleme auftreten:

  1. Ihr steuerndes Terminal ist mit so vielen Ausgabedaten und Fehler-/Diagnosemeldungen gefüllt.
  2. Falls das Terminal geschlossen wird, wird der Prozess zusammen mit seinen untergeordneten Prozessen beendet.

Um diese beiden Probleme zu lösen, müssen Sie einen Prozess vollständig von einem steuernden Terminal trennen. Bevor wir das Problem tatsächlich lösen, lassen Sie uns kurz erläutern, wie Prozesse im Hintergrund ausgeführt werden.

So starten Sie einen Linux-Prozess oder -Befehl im Hintergrund

Wenn ein Prozess bereits ausgeführt wird, wie im Beispiel des tar-Befehls unten, drücken Sie einfach Ctrl+Z Um es zu stoppen, geben Sie den Befehl bg ein um mit seiner Ausführung im Hintergrund als Job fortzufahren.

Sie können alle Ihre Hintergrundjobs anzeigen, indem Sie jobs eingeben . Allerdings ist seine stdin , stdout , stderr sind noch mit dem Terminal verbunden.

$ tar -czf home.tar.gz .
$ bg
$ jobs

Sie können einen Prozess auch direkt im Hintergrund ausführen, indem Sie das kaufmännische Und, & verwenden unterschreiben.

$ tar -czf home.tar.gz . &
$ jobs

Schauen Sie sich das Beispiel unten an, obwohl der tar-Befehl als Hintergrundjob gestartet wurde, wurde dennoch eine Fehlermeldung an das Terminal gesendet, was bedeutet, dass der Prozess immer noch mit dem steuernden Terminal verbunden ist.

$ tar -czf home.tar.gz . &
$ jobs

Linux-Prozesse nach dem Beenden des Terminals weiterlaufen lassen

Wir werden disown verwenden Befehl, es wird verwendet, nachdem ein Prozess gestartet und in den Hintergrund gestellt wurde, seine Arbeit besteht darin, einen Shell-Job aus den aktiven Listenjobs der Shell zu entfernen, daher werden Sie fg nicht verwenden , bg Befehle für diesen bestimmten Job nicht mehr.

Wenn Sie das steuernde Terminal schließen, wird der Job außerdem nicht hängen bleiben oder ein SIGHUP senden zu allen untergeordneten Jobs.

Empfohlener Text: 5 Möglichkeiten, um Remote-SSH-Sitzungen und -Prozesse am Laufen zu halten

Sehen wir uns das folgende Beispiel für die Verwendung von diswon an Bash eingebaute Funktion.

$ sudo rsync Templates/* /var/www/html/files/ &
$ jobs
$ disown  -h  %1
$ jobs

Sie können auch nohup verwenden Befehl, der auch ermöglicht, dass ein Prozess im Hintergrund weiterläuft, wenn ein Benutzer eine Shell verlässt.

$ nohup tar -czf iso.tar.gz Templates/* &
$ jobs

Linux-Prozesse vom Steuerterminal trennen

Um einen Prozess vollständig von einem steuernden Terminal zu trennen, verwenden Sie daher das folgende Befehlsformat, dies ist effektiver für eine grafische Benutzeroberfläche (GUI ) Anwendungen wie Firefox:

$ firefox </dev/null &>/dev/null &

Unter Linux /dev/null ist eine spezielle Gerätedatei, die alle darauf geschriebenen Daten abschreibt (entfernt), im obigen Befehl wird die Eingabe gelesen und die Ausgabe an /dev/null gesendet .

Empfohlener Text: 10 Beispiele für Bildschirmbefehle zum Trennen von Terminalsitzungen

Als abschließende Bemerkung, sofern ein Prozess mit einem steuernden Terminal verbunden ist, sehen Sie als Benutzer mehrere Ausgabezeilen der Prozessdaten sowie Fehlermeldungen auf Ihrem Terminal. Auch hier gilt:Wenn Sie das steuernde Terminal schließen, werden Ihr Prozess und die untergeordneten Prozesse beendet.

Wichtig ist, dass Sie uns bei Fragen oder Anmerkungen zu diesem Thema über das unten stehende Kommentarformular erreichen.


Linux
  1. Was ist ein Chown-Befehl unter Linux und wie wird er verwendet?

  2. So verwalten Sie Linux-Hintergrundjobs mit den Befehlen fg und bg

  3. So finden und töten Sie den Zombie-Prozess in Linux

  4. Wie beendet man einen Prozess unter Linux mit dem Befehl?

  5. Wie starte ich GUI-Linux-Programme von der Befehlszeile aus, aber getrennt von der Befehlszeile?

So finden und beenden Sie einen Prozess mit einem Linux-Terminal

So starten und beenden Sie einen Prozess in Ubuntu 20.04 LTS

So arbeiten Sie mit Vordergrund- und Hintergrundprozessen unter Linux

So installieren und verwenden Sie den Befehl locate unter Linux

Wie man einen Prozess unter Linux beendet

So installieren und verwenden Sie den fd-Befehl unter Linux