In diesem Leitfaden werden wir ein einfaches, aber wichtiges Konzept ans Licht bringen Prozessabwicklung in einem Linux-System, wodurch ein Prozess vollständig von seinem steuernden Terminal getrennt wird.
Wenn ein Linux-Prozess mit einem Terminal verknüpft ist, können zwei Probleme auftreten:
Um diese beiden Probleme zu lösen, müssen Sie einen Prozess vollständig von einem steuernden Terminal trennen. Bevor wir uns tatsächlich an die Lösung des Problems machen, wollen wir uns kurz mit der Ausführung von Prozessen im Hintergrund unter Linux befassen.
Inhaltsverzeichnis
Wenn ein Prozess bereits ausgeführt wird, z. B. der Beispiel für einen Tar-Befehl unten drücken Sie einfach Strg+Z
Um es zu stoppen, geben Sie den Befehl ein bg
um die Ausführung im Hintergrund als Job fortzusetzen.
Sie können alle Ihre Hintergrundjobs durch Eingabe anzeigen Arbeitsplätze
. Allerdings ist es stdin, stdout, Und stderr sind noch mit dem Terminal verbunden.
$ tar -czf home.tar.gz. $ bg. $ Jobs.
Sie können einen Linux-Prozess auch im Hintergrund ausführen, indem Sie das kaufmännische Und verwenden. &
Zeichen.
$ tar -czf home.tar.gz. & $ Jobs.
Schauen Sie sich das Beispiel unten an, obwohl das tar-Befehl als Hintergrundjob gestartet wurde, wurde dennoch eine Fehlermeldung an das Terminal gesendet, was bedeutet, dass der Prozess noch mit dem steuernden Terminal verbunden ist.
$ tar -czf home.tar.gz. & $ Arbeitsplätzetar: ./.config/etcher: Kann nicht geöffnet werden: Berechtigung verweigert
Wir werden das verwenden verleugnen Der Befehl, der verwendet wird, nachdem der Prozess ausgeführt und in den Hintergrund gestellt wurde, besteht darin, einen Shell-Job aus der Liste der aktiven Jobs der Shell zu entfernen. Daher wird er nicht verwendet fg
, bg
Befehle für diesen bestimmten Job mehr.
Wenn Sie das steuernde Terminal schließen oder sich abmelden, bleibt der Job außerdem hängen und sendet keine Nachricht SEUFZEND zu etwaigen Kinderjobs.
Schauen wir uns das folgende Beispiel für die Verwendung an abgelehnt Integrierte Bash-Funktion.
$ sudo rsync Templates/* /var/www/html/files/ & $ Jobs. $ disown -h %1. $ Jobs.
Sie können auch die verwenden neinhup
Befehl, der es einem Prozess auch ermöglicht, im Hintergrund weiterzulaufen, wenn ein Benutzer eine Shell verlässt.
$ nohup tar -czf iso.tar.gz Templates/* & $ Jobs.
Das könnte Ihnen auch gefallen:
Um einen Prozess vollständig von einem steuernden Terminal zu trennen, verwenden Sie daher das folgende Befehlsformat. Dies ist effektiver für die grafische Benutzeroberfläche (GUI) Anwendungen wie Firefox:
$ Firefox /dev/null &
Unter Linux, /dev/null ist ein spezielle Gerätedatei Dadurch werden alle darauf geschriebenen Daten abgeschrieben (entfernt). Im obigen Befehl wird die Eingabe gelesen und die Ausgabe an gesendet /dev/null.
Das könnte Ihnen auch gefallen:
Als Abschlussbemerkung: 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 Ihre untergeordneten Prozesse beendet.
Wichtig: Wenn Sie Fragen oder Anmerkungen zu diesem Thema haben, können Sie uns über das unten stehende Kommentarformular erreichen.