Bash -Hintergrundprozessmanagement verleihen

Bash -Hintergrundprozessmanagement verleihen

Es gibt viele Male, wenn ein Bash -Entwickler oder Benutzer einen Prozess im Hintergrund ausführen möchte, entweder aus der Befehlszeile oder aus einem Bash -Skript, und dann denselben Vorgang später erneut behandeln. Es gibt verschiedene Befehlszeilen -Tools, mit denen eins dies tun kann. Hintergrundprozesse zu starten, zu verwalten und zu zerstören, ist eine Voraussetzung für viele weitere fortgeschrittene Aufgaben, insbesondere in den Bereichen fortschrittlicher Skript- und Prozesskontrolle.

In diesem Tutorial lernen Sie:

  • So starten, umgehen und/oder verwalten und zerstören Sie Hintergrundprozesse
  • Welche Befehlszeilen -Tools stehen zur Verfügung, um Sie beim Bash -Prozessmanagement zu unterstützen
  • Beispiele, die die Verwendung von Hintergrundprozessen in der BASH -Befehlszeile hervorheben
Bash -Hintergrundprozessmanagement verleihen

Softwareanforderungen und Konventionen verwendet

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System Linux-Verteilungsunabhängige
Software BASH -Befehlszeile, Linux -basiertes System
Andere Jedes Dienstprogramm, das standardmäßig nicht in der Bash -Shell enthalten ist sudo apt-Get Installieren Sie den Dienstprogramm (oder yum install Für Redhat -basierte Systeme)
Konventionen # - Erfordert, dass Linux -Commands mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mithilfe von verwendet werden sudo Befehl
$-erfordert, dass Linux-Commands als regulärer nicht privilegierter Benutzer ausgeführt werden

Beispiel 1: Starten Sie einen Prozess im Hintergrund und bringen Sie ihn wieder in den Vordergrund

$ Sleep 1000 & [1] 25867 $ FG Sleep 1000 


Hier haben wir im Hintergrund einen 1000 -Sekunden -Schlafprozess gestartet. Wenn wir einen Prozess in den Hintergrund setzen möchten, können wir das Ampere und den Verstärker verwenden (&) Unterschreiben Sie hinter einem Befehl. Dadurch wird der Prozess in den Hintergrund gestellt und die berichtet PID (Prozess -ID, eine Identifikator -Nummer, die jeden Prozess identifiziert, der auf einer Linux -Maschine ausgeführt wird.). In diesem Beispiel die PID Ist 25867. Beachten Sie, dass der Prozess immer wieder läuft, wenn er in den Hintergrund platziert wird, was uns das Beste aus beiden Welten gibt. Der Prozess wird ausgeführt, und wir erhalten unsere Befehlszeile in der Zwischenzeit wieder! Großartig.

Als nächstes stellen wir den Prozess wieder in den Vordergrund (als ob es nie eine Hintergrundanweisung wäre), indem wir die verwenden fg (ich.e. Vordergrund) Befehl. Das Ergebnis ist, dass wir sehen, welcher Prozess wieder in den Vordergrund gestellt wird (ich.e. Schlaf 1000) Und unsere Eingabeaufforderung kehrt nicht zurück, wenn wir den Schlaf wieder in den Vordergrund stellt und die Eingabeaufforderung nur zurückkehrt, wenn der 1000 -Sekunden -Schlaf fertig ist.

Nehmen wir an, wir haben das platziert Schlaf 1000 Im Hintergrund hat andere 500 Sekunden lang andere gearbeitet und dann ausgeführt fg… Wie lange würde der Schlaf noch laufen?? Wenn Sie 500 Sekunden erraten (oder wussten), dann haben Sie Recht. Die ersten 500 Sekunden wurden als Hintergrundprozess ausgeführt, und die zweiten 500 werden als Vordergrundprozess sein.

Beachten Sie auch, dass, wenn Sie die Shell beenden, Ihr Befehl endet - unabhängig davon, ob sie im Hintergrund oder im Vordergrund ausgeführt werden (es sei denn, Sie haben sie verleugnet, mehr dazu im nächsten Beispiel).

Beispiel 2: Verleugnung eines Prozesses

$ Sleep 1000 & [1] 26090 $ disunce %1 $ 

Hier begannen wir einen weiteren 1000 Sekunden -Schlaf und wurden über die Haltung des Hintergrundprozesses wie zuvor informiert. Als nächstes haben wir ausgeführt Ablehnung %1, unter Bezugnahme auf den ersten Hintergrundprozess (wie auch die durch die angegeben [1] vor der PID!) und anweisen, diesen Prozess aus der aktuellen Hülle zu verleugnen (zu disassoziieren). Es ist nicht so, dass es vom aktuellen Benutzer abgebaut wird (und zum Beispiel PS -f | Grep Sleep | Grep -v Grep wird in der Tat immer noch Ihre BenutzerID anzeigen), sondern aus der aktuellen Shell -Sitzung. Sehen:

$ Sleep 1000 & [1] 26214 $ disunce %1 $ ps -f | Grep Sleep | Grep -V Grep Roel 26214 26120 0 13:13 Punkte/3 00:00:00 Schlaf 1000 $ Ausgang 

Dann eine neue Hülle öffnen und das erneut ausführen ps Wir können sehen, dass der Befehl noch vorhanden ist und jetzt an PPID (übergeordnete PID) beigefügt ist 1 anstatt 26120 als Elternpid:

$ ps -f | Grep Sleep | Grep -V Grep Roel 26214 1 0 19:48 ? 00:00:00 Schlaf 1000 

Es ist, als ob die Shell noch läuft (beachten Sie die 26214 PID ist immer noch aktiv/mit dem Laufen verbunden schlafen), jedoch ist der Teil der aktiven Befehlszeile davon weg!

Großartig, so gibt wir uns eine Möglichkeit, Prozesse von der aktuellen Hülle zu destieren und so weiterzuleiten, wenn unsere Shell -Sitzung geschlossen ist.

Beispiel 3: Platzieren Sie einen Befehl in den Hintergrund

$ Sleep 1000 ^z [1]+ gestoppt Schlaf 1000 $ BG %1 [1]+ Schlaf 1000 & $ 

Hier haben wir eine begonnen Schlaf 1000 im Vordergrund (nein & wurde verwendet) und der unterbrochene diesen Prozess mit der Tastaturkombination unterbrochen Strg+z. Beachten Sie, dass während die Ausgabe sagt ^Z (Und ^ ist ein Symbol zum Angeben Strg), Die Z ist eigentlich ein Kleinbuchstaben z, Sie müssen also nicht verwenden SCHICHT, Nur Strg+z.

Beachten Sie, dass der Prozess tatsächlich gestoppt wurde und er nicht weiter lief. Jetzt haben wir den Prozess in den Hintergrund gestellt und inne gemacht. Damit diesen Prozess jetzt weiter läuft, haben wir zwei Optionen FG %1 - ich.e. den Prozess platzieren durch [1] Zurück in den Vordergrund und läuft weiterhin normal, oder BG %1 das wird den Prozess wieder aufnehmen, aber im Hintergrund. Im Beispiel können wir Letzteres sehen und unsere Eingabeaufforderung kehrt erwartungsgemäß zurück.

Beachten Sie, dass die oben genannten geringfügig verstärkt werden kann verleugnen, Übereinstimmung mit einer häufig verwendeten Möglichkeit, einen Prozess bei der Verwendung eines Remote -Servers zu behandeln. Nehmen wir an, Sie sind über SSH mit einem Remote -Server verbunden und haben einen großen Job gestartet, zum Beispiel eine Sicherungs- oder Berichtserzeugung. Jetzt möchten Sie Ihr Büro für den Tag verlassen, sind sich aber nicht sicher, ob Ihre SSH -Verbindung die ganze Nacht über live bleibt und ob Ihr Computer nicht Winterschlaf oder ähnlich. Eine dieser Aktionen könnte den Laufjob gefährden!

In diesem Fall können Sie Folgendes tun;

$ Sleep 1000 ^Z [1]+ gestoppt Schlaf 1000 $ BG %1 [1]+ Schlaf 1000 & $ disunce %1 $ 


Und glücklich und sicher gehen Sie von Ihrem Computer weg (nachdem Sie ihn eingesperrt haben), da Sie sicher sein können, dass - auch wenn Ihre SSH -Verbindung ausfällt, oder Ihr Computer Winterschlaf oder die Reinigungsdame das Netzkabel ausschlägt, dass Ihr Job bleibt Betrieb. Da der Prozess von der aktuellen Shell -Sitzung abgelehnt/abgelehnt wurde, wird er weiter ausgeführt, auch wenn die aktuelle Shell -Sitzung irgendwie gekündigt wird.

Eine kleine Einschränkung ist, dass Sie nicht verwenden können fg Am Morgen, um den Job wieder in den Vordergrund zu bringen, auch wenn Ihre SSH -Verbindung und Shell nie beendet/fehlgeschlagen sind:

$ fg bash: fg: aktuell: Nein solcher Job $ fg %1 bash: fg: %1: Nein solcher Job 

Wenn es abgelehnt ist, ist es abgebaut und weg! Der Job läuft jedoch weiter PS -f | grep your_process_name | Grep -v Grep.

Beispiel 4: Mehrere Hintergrundprozesse und Beendigungsprozesse

Zuerst starten wir zwei Prozesse im Hintergrund mit unserem Vertrauen Schlaf 1000 Beispiel:

$ Sleep 1000 & [1] 27158 $ Sleep 1000 & [2] 27159 

Wir können hier sehen, dass zwei Hintergrundprozesse ([1] Und [2], mit PIDs 27158 Und 27159 wurden jeweils gestartet. Als nächstes töten wir den ersten Prozess:

$ Kill %1 $ [1]- Sleep 1000 $ beendet 

Das war einfach/einfach, richtig? Eine Frage, die man stellen könnte, ist, warum die beendeten Informationen nicht sofort angezeigt werden (eine zusätzliche Eingabetaste ist erforderlich, wie Sie sehen können). Der Grund ist, dass der Prozess nicht beendet wurde, bevor die Befehlszeile zurückgegeben wurde. Im Rahmen der Arbeit, die jedes Mal vor einer neuen Befehlszeile durchgeführt wird. So wurde bei der Eingabetaste erneut gedrückt (angezeigt durch das leere $ Zeile wird ein Bericht über den beendeten Prozess angezeigt.

Beispiel 5: eine vor dem anderen erledigt

Beginnen wir erneut zwei Prozesse, aber diesmal schläft der zweite Prozess nur 3 Sekunden lang:

$ Sleep 1000 & [1] 27406 $ Sleep 3 & [2] 27407 $ 

Nach ca. 5 Sekunden, Drücken Sie die Eingabetaste, werden wir sehen:

$ [2]+ erledigte Schlaf 3 

Was wird jetzt passieren, wenn wir verwenden fg in diesem Fall ohne das Original [1] Spezifizierer?

$ fg schlaf 1000 ^z [1]+ gestoppte Schlaf 1000 $ 


Der erste Prozess wird fortgesetzt! Dies ist auch der Fall, wenn das umgekehrte Verfahren verwendet wurde:

$ Sleep 10 & [1] 27346 $ Sleep 1000 & [2] 27347 $ [1] 

Der fg Der Befehl wird immer den letzten Befehl nehmen, der in den Hintergrund gestellt wurde (und der noch nicht fertiggestellt wurde) und ihn wieder in den Vordergrund stecken.

Abschluss

In diesem Artikel haben wir uns verschiedene Befehle angesehen, einschließlich BG, fg und der Hintergrund verprügelt Idiom -Ampersand & Dies kann nach jedem Befehl platziert werden, um diesen Befehl in den Hintergrund zu platzieren. Wir haben auch den Benutzer des töten Befehl und untersuchte, wie verschiedene Hintergrundprozesse mithilfe der angesprochen werden % Bash Idiom mit einer übereinstimmenden Hintergrundprozessnummer wie %1 für [1] usw.

Wenn Sie mehr über Bash im Allgemeinen erfahren möchten, schauen Sie sich die nützlichen Tipps und Tricks -Beispiele der nützlichen Bash -Befehlszeile an.

Genießen Sie Ihre neu gefundenen Bash -Fähigkeiten. Wenn Sie mit Hintergrundprozessen etwas Cooles machen, hinterlassen Sie bitte einen Kommentar unten!

Verwandte Linux -Tutorials:

  • Eine Einführung in Linux -Automatisierung, Tools und Techniken
  • Mastering -Bash -Skriptschleifen beherrschen
  • Verschachtelte Schleifen in Bash -Skripten
  • Dinge zu installieren auf Ubuntu 20.04
  • Multi-Thread-Bash-Skript- und Prozessmanagement bei der…
  • Mint 20: Besser als Ubuntu und Microsoft Windows?
  • Umgang mit Benutzereingaben in Bash -Skripten
  • Hung Linux System? Wie man zur Befehlszeile entkommt und…
  • GDB -Debugging -Tutorial für Anfänger
  • Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux