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:
- Ihr steuerndes Terminal ist mit so vielen Ausgabedaten und Fehler-/Diagnosemeldungen gefüllt.
- 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.