So führen und steuern Sie Hintergrundprozesse in Linux

Inhalt

Eine Shell-Umgebung auf einem Linux-Computer.

Verwenden Sie die Bash-Shell unter Linux, um Vordergrund- und Hintergrundprozesse zu verwalten. Sie können Bash-Jobsteuerungssignale und -funktionen verwenden, um Ihnen mehr Flexibilität bei der Ausführung von Befehlen zu geben. Wir zeigen dir wie.

Alles über die Prozesse

Immer wenn ein Programm auf einem Linux- oder Unix-ähnlichen Betriebssystem läuft, eine Prozedur wird gestartet. "Prozedur" ist der Name der internen Darstellung des laufenden Programms im Arbeitsspeicher des Computers.. Für jedes aktive Programm gibt es ein Verfahren. Genau genommen, Für fast alles, was auf Ihrem Computer läuft, gibt es ein Verfahren. Dazu gehören die Komponenten Ihres grafische Desktop-Umgebung (WO) Was GNOME Ö WOund System verdammt die am Anfang gestartet werden.

Wieso den eng alles läuft? Brunnen, Bash eingebettet als CD, pwd, und alias Es ist nicht erforderlich, ein Verfahren eingeleitet zu haben (Ö “erzeugt”) wenn sie laufen. Bash führt diese Befehle innerhalb der Bash-Shell-Instanz aus, die in Ihrem Terminalfenster ausgeführt wird. Diese Befehle sind genau deshalb schnell, weil keine Prozedur gestartet werden muss, damit sie ausgeführt werden können.. (Du kannst Tippen help in einem Terminalfenster, um die Liste der integrierten Bash-Funktionen anzuzeigen).

Prozesse können im Vordergrund laufen, in diesem Fall werden sie Ihr Terminal beschlagnahmen, bis sie abgeschlossen sind, oder sie können im Hintergrund laufen. Im Hintergrund laufende Prozesse dominieren das Terminalfenster nicht und Sie können darin weiterarbeiten. Oder zumindest, sie dominieren das Terminalfenster nicht, wenn sie keine Bildschirmausgabe erzeugen.

Ein chaotisches Beispiel

Wir starten ein einfaches ping Laufen verfolgen. Wir gehen zu ping el dominio How-To Geek. Dies wird als Vordergrundverfahren ausgeführt.

ping www.systempeaker.com

Wir erhalten die erwarteten Ergebnisse, im Terminalfenster nach unten scrollen. Wir können im Terminalfenster nichts anderes tun, während ping Läuft. Um den Befehl zu beenden, Drücken Sie Ctrl+C.

Strg+C

Die sichtbare Wirkung der Ctrl+C ist im Screenshot hervorgehoben. ping gibt eine kurze Zusammenfassung und hört dann auf.

Lass uns das wiederholen. Aber diesmal werden wir zuschlagen Ctrl+Z Anstatt von Ctrl+C. Die Aufgabe wird nicht abgeschlossen. Es wird zu einer Hintergrundaufgabe. Wir bekommen die Kontrolle über das Terminalfenster, das an uns zurückgegeben wird.

ping www.systempeaker.com
Strg+Z

Die sichtbare Wirkung des Schlagens Ctrl+Z ist im Screenshot hervorgehoben.

Diesmal wird uns gesagt, dass die Prozedur aufhört. Angehalten heißt nicht fertig. Es ist wie ein Auto auf einem Stoppschild. Wir haben es nicht weggeworfen und weggeworfen. Noch unterwegs, gestoppt, darauf warten anzufangen. Das Verfahren ist nun ein Hintergrund Job.

das jobs Befehl wird die Jobs auflisten die in der aktuellen Terminalsitzung gestartet wurden. Und da die Jobs sind (zwangsläufig) Prozesse, gleichzeitig können wir die ps Befehl, sie zu sehen. Lassen Sie uns beide Befehle verwenden und ihre Ausgaben vergleichen. Wir werden die verwenden T Möglichkeit (Terminal) Option, um nur die Prozesse aufzulisten, die in diesem Terminalfenster ausgeführt werden. Beachten Sie, dass es nicht erforderlich ist, einen Bindestrich zu verwenden - mit dem T Möglichkeit.

Arbeitsplätze
PST

das jobs Befehl sagt uns:

  • [1]: Die Zahl in Klammern ist die Jobnummer. Wir können dies verwenden, um auf den Job zu verweisen, wenn wir ihn mit Jobsteuerbefehlen steuern müssen.
  • +: Das Pluszeichen + zeigt, dass dies der Job ist, auf den reagiert wird, wenn wir einen Jobsteuerungsbefehl ohne eine bestimmte Jobnummer verwenden. Es heißt Standardjob. Der Standardjob ist immer der Job, der zuletzt der Jobliste hinzugefügt wurde.
  • Gestört: Das Verfahren läuft nicht.
  • ping www.systempeaker.com: Die Befehlszeile, die die Prozedur gestartet hat.

das ps Befehl sagt uns:

  • PID: Die Prozedur-ID der Prozedur. Jedes Verfahren hat eine eindeutige Kennung.
  • TTY: Der Pseudo-Fernschreiber (Terminalfenster) von dem aus das Verfahren ausgeführt wurde.
  • STATISTIKEN: Der Stand des Verfahrens.
  • WETTER: Die von der Prozedur verbrauchte CPU-Zeit.
  • BEFEHL: Der Befehl, der die Prozedur gestartet hat.

Dies sind übliche Werte für die Spalte STAT:

  • D: Ununterbrochener Schlaf. Das Verfahren befindet sich im Wartezustand, in der Regel auf Ein- oder Ausfahrt warten, und es kann nicht unterbrochen werden.
  • ich: Inaktiv.
  • R: In Eile.
  • S: Unterbrechbarer Traum.
  • T: Angehalten durch ein Arbeitskontrollsignal.
  • MIT: Ein Zombie-Verfahren. Das Verfahren ist beendet, Das Ausgangsverfahren hat dies jedoch nicht getan. “Gereinigt”.

Dem Wert in der Spalte STAT kann einer dieser zusätzlichen Indikatoren folgen:

  • <: Aufgabe mit hoher Priorität (nicht angenehm für andere Prozesse).
  • Norden: Niedrige Priorität (gut für andere Prozesse).
  • L: Prozedur hat Seiten im Speicher gesperrt (regelmäßig von Echtzeitprozessen genutzt).
  • S: Sitzungsleiter. Ein Sitzungsleiter ist ein Verfahren, das Prozessgruppen gestartet hat. Eine Shell ist ein Sitzungsleiter.
  • l: Multithread-Verfahren.
  • +: Eine Nahaufnahme.

Wir können sehen, dass Bash einen Zustand von hat Ss. Das große "S" sagt uns, dass die Bash-Shell schläft und unterbrechbar ist. Sobald wir es brauchen, Antwort auf. Die “S” Kleinbuchstaben sagen uns, dass die Shell ein Sitzungsleiter ist.

Der Ping-Befehl hat den Status T. Das sagt uns, dass ping wurde durch ein Arbeitskontrollsignal gestoppt. In diesem Beispiel, Das war die Ctrl+Z Wir haben es immer in den Hintergrund gestellt.

das ps T der Befehl hat den Status R, was bedeutet laufen. das + zeigt an, dass dieses Verfahren ein Mitglied der Vordergrundgruppe ist. So dass er ps T Der Befehl läuft im Vordergrund.

Der bg-Befehl

das bg Der Befehl wird verwendet, um eine Hintergrundprozedur wieder aufzunehmen. Mit oder ohne Auftragsnummer verwendbar. Wenn Sie es ohne Arbeitsnummer verwenden, Standardjob tritt in den Vordergrund. Das Verfahren läuft noch im Hintergrund. Kann dir keine Eingaben senden.

Wenn wir die bg Befehl, wir werden unsere wieder aufnehmen ping Befehl:

bg

das ping Der Befehl wird fortgesetzt und wir sehen erneut die scrollende Ausgabe im Terminalfenster. Der Name des neu gestarteten Befehls wird angezeigt. Dies ist im Screenshot hervorgehoben.

Hintergrund-Ping-Prozess mit Beenden auf einer Terminal-Witwe fortgesetzt

Aber wir haben ein Hindernis. Task läuft im Hintergrund und akzeptiert keine Eingaben. Dann, Wie stoppen wir es? Ctrl+C tut nichts. Wir können es sehen, wenn wir es schreiben, aber die Hintergrundaufgabe bekommt diese Tastenanschläge nicht, also klingelt es fröhlich weiter.

Genau genommen, jetzt sind wir im komischen Combo-Modus. Wir können in das Terminalfenster schreiben, aber was wir schreiben, wird schnell von der Verschiebungsausgabe des ping Befehl. Alles was wir schreiben wirkt im Vordergrund.

Um unsere Hintergrundaufgabe zu stoppen, wir müssen es in den vordergrund stellen und dann aufhören.

Der fg-Befehl

das fg Der Befehl bringt eine Hintergrundaufgabe in den Vordergrund. Als die bg Befehl, kann mit oder ohne Auftragsnummer verwendet werden. Die Verwendung mit einer Jobnummer bedeutet, dass es für einen bestimmten Job funktioniert. Bei Verwendung ohne Auftragsnummer, der letzte Befehl, der in den Hintergrund gesendet wurde, wird verwendet.

Wenn wir schreiben fg unsere ping Der Befehl wird in den Vordergrund treten. Die von uns eingegebenen Zeichen werden mit der Ausgabe des ping Befehl, aber sie werden von der Shell so bedient, als ob sie wie gewohnt auf der Kommandozeile eingegeben worden wären. Und in Wirklichkeit, aus der Sicht der Bash-Shell, genau das ist passiert.

fg

Und jetzt haben wir die ping Befehl läuft wieder im Vordergrund, wir können benutzen Ctrl+C um es zu töten.

Strg+C

Wir müssen die richtigen Signale senden

Das war nicht gerade schön. Offensichtlich, Das Ausführen einer Prozedur im Hintergrund funktioniert am besten, wenn die Prozedur keine Ausgabe erzeugt und keine Eingabe benötigt.

Aber, chaotisch oder nicht, unser Beispiel erreicht:

  • Setzen Sie eine Hintergrundprozedur.
  • Wiederherstellen des Vorgangs in einen im Hintergrund ausgeführten Status.
  • Das Verfahren wieder in den Vordergrund rücken.
  • Abschluss des Verfahrens.

Wenn Sie verwenden Ctrl+C und Ctrl+Z , sendet Signale an das Verfahren. Diese sind Abkürzungsformen um die zu benutzen kill Befehl. existieren 64 verschiedene Signale das kill Du kannst senden. Benutzen kill -l in der Befehlszeile, um sie aufzulisten. kill ist nicht die einzige Quelle dieser Signale. Einige von ihnen werden automatisch von anderen Prozessen innerhalb des Systems generiert.

Hier sind einige der am häufigsten verwendeten.

  • SEUFZEND: Unterschrift 1. Wird automatisch an eine Prozedur gesendet, wenn das Terminal, in dem sie ausgeführt wird, geschlossen wird.
  • UNTERSCHRIFT: Unterschrift 2. An ein Verfahren gesendet, das Sie richtig machen. Ctrl+C. Der Vorgang wird unterbrochen und Sie werden zum Beenden aufgefordert.
  • SIGQUIT: Unterschrift 3. Wird an eine Prozedur gesendet, wenn der Benutzer ein Signal sendet, mit dem Rauchen aufzuhören Ctrl+D.
  • SIGKILL: Unterschrift 9. Der Vorgang stoppt sofort und versucht nicht, sauber herunterzufahren. Das Verfahren entfaltet sich nicht anmutig.
  • SIGTERM: Unterschrift 15. Dies ist das Standardsignal, das von . gesendet wird kill. Es ist das Standard-Programmbeendigungssignal.
  • SIGTSTP: Unterschrift 20. An eine Prozedur gesendet, wenn Sie verwenden Ctrl+Z. Stoppt den Vorgang und stellt ihn in den Hintergrund.

Wir müssen die kill Befehl zur Ausgabe von Signalen, denen keine Tastenkombinationen zugewiesen sind.

Bessere Kontrolle der Arbeit

Ein Verfahren trat durch den Einsatz von . in den Hintergrund Ctrl+Z wird in den gestoppten Zustand versetzt. Wir müssen die nutzen bg Befehl, damit es wieder funktioniert. Das Starten eines Programms als im Hintergrund laufende Prozedur ist einfach. Fügen Sie ein kaufmännisches Und-Zeichen hinzu & bis zum Ende der Kommandozeile.

Auch wenn es besser ist, dass die Hintergrundprozesse nicht in das Terminalfenster schreiben, Wir werden Beispiele verwenden, die dies tun. Wir müssen etwas in den Screenshots haben, auf das wir verweisen können. Dieser Befehl startet eine Endlosschleife als Hintergrundprozedur:

solange es wahr ist; Echo “Wie man das Geek-Loop-Verfahren durchführt”; schlafen 3; getan &

Uns werden die Auftragsnummer und die Verfahrensidentifikations-ID des Verfahrens mitgeteilt. Unsere Arbeitsnummer ist 1 und die Identifizierung des Verfahrens ist 1979. Wir können diese Identifikatoren verwenden, um das Verfahren zu steuern.

Die Ausgabe unserer Endlosschleife erscheint im Terminalfenster. Wie vorher, Wir können die Befehlszeile verwenden, aber alle von uns ausgegebenen Befehle sind mit der Ausgabe der Schleifenprozedur durchsetzt.

ls

Ausgabe des Hintergrundschleifenprozesses durchsetzt mit der Ausgabe anderer Befehle

Um unser Verfahren zu stoppen, können wir verwenden jobs um uns an die Jobnummer zu erinnern und dann zu verwenden kill.

jobs informiert, dass unser Verfahren die Jobnummer ist 1. Um diese Nummer mit zu verwenden kill wir müssen ihm ein Prozentzeichen voranstellen %.

Arbeitsplätze
töten %1

VERBUNDEN: Wie Linux-Signale funktionieren: UNTERSCHRIFT, SIGTERM und SIGKILL

kill sendet die SIGTERM Unterschrift, Zeichennummer 15, zum Verfahren und es endet. Beim nächsten Drücken der Enter-Taste, Auftragsstatus wird angezeigt. Listet die Prozedur als “fertig”. Wenn das Verfahren nicht auf die kill Befehl kann eine Stufe höher gehen. Benutzen kill mit SIGKILL , Zeichennummer 9. Geben Sie einfach die Nummer ein 9 Komm herein kill Befehlsauftragsnummer.

töten 9 %1

Dinge, die wir behandelt haben

  • Strg + C: Senden SIGINT, Unterschrift 2, zum Verfahren, wenn du die Eingabe akzeptierst, und sagt ihm, er soll fertig werden.
  • Strg + D: Senden SISQUIT, Unterschrift 3, zum Vorgang - wenn Sie die Eingabe akzeptieren - und zum Verlassen auffordern.
  • Strg + MIT: Senden SIGSTP, Unterschrift 20, zum Vorgang und fordert Sie auf, aufzuhören (aussetzen) und werden zum Hintergrundverfahren.
  • funktioniert: Listen Sie Hintergrundjobs auf und zeigen Sie ihre Jobnummer an.
  • bg Arbeitsnummer: Starten Sie eine Hintergrundprozedur neu. Wenn Sie keine Arbeitsnummer angeben, die letzte Prozedur, die zu einer Hintergrundaufgabe wurde, wird verwendet.
  • fg Arbeitsnummer: bringt eine Hintergrundprozedur in den Vordergrund und startet sie neu. Wenn Sie keine Arbeitsnummer angeben, die letzte Prozedur, die zu einer Hintergrundaufgabe wurde, wird verwendet.
  • Befehlszeile UND: Fügen Sie ein kaufmännisches Und-Zeichen hinzu & am Ende einer Befehlszeile diesen Befehl als Hintergrundaufgabe ausführen, was läuft.
  • töten %Arbeitsnummer: Senden SIGTERM, Unterschrift 15, zum Verfahren, um es zu beenden.
  • töten 9 %Arbeitsnummer: Senden SIGKILL, Unterschrift 9, zum Verfahren und beendet es abrupt.

VERBUNDEN: So beenden Sie Prozesse vom Linux-Terminal aus

setTimeout(Funktion(){
!Funktion(F,B,e,v,n,T,S)
{wenn(f.fbq)Rückkehr;n=f.fbq=Funktion(){n.callMethode?
n.callMethod.apply(n,Argumente):n.queue.push(Argumente)};
wenn(!f._fbq)f._fbq = n;n.drücken=n;n.geladen=!0;n.version=’2.0′;
n.Warteschlange=[];t=b.Element erstellen(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(T,S) } (window, dokumentieren,'Skript',
„https://connect.facebook.net/en_US/fbevents.js’);
fbq('drin', ‘335401813750447’);
fbq('Spur', 'Seitenansicht');
},3000);

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.