Eine Shell-Umgebung auf einem Linux-Computer.

Fatmawati Achmad Zaenuri/Shutterstock.com

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



excel zeile in spalte transponieren

Alles über Prozesse

Immer wenn ein Programm in einem Linux- oder Unix-ähnlichen Betriebssystem ausgeführt wird, wird ein Prozess gestartet. Process ist die Bezeichnung für die interne Repräsentation des ausführenden Programms im Arbeitsspeicher des Computers. Für jedes aktive Programm gibt es einen Prozess. Tatsächlich gibt es für fast alles, was auf Ihrem Computer ausgeführt wird, einen Prozess. Dazu gehören die Komponenten Ihres grafische Desktop-Umgebung (GDE) wie GNOME oder WO , und system Dämonen die beim Start gestartet werden.

Warum fast alles was läuft? Nun, Bash-Integrationen wie CD , pwd , und alias Sie müssen keinen Prozess gestartet (oder erzeugt) haben, wenn sie ausgeführt werden. Bash führt diese Befehle innerhalb der Instanz der Bash-Shell aus, die in Ihrem Terminalfenster ausgeführt wird. Diese Befehle sind genau deshalb schnell, weil für ihre Ausführung kein Prozess gestartet werden muss. (Sie können |_+_| in ein Terminalfenster eingeben, um die Liste der Bash-Integrationen anzuzeigen.)

Prozesse können im Vordergrund laufen, dann übernehmen sie Ihr Terminal bis sie abgeschlossen sind, oder sie laufen im Hintergrund. Im Hintergrund laufende Prozesse dominieren das Terminalfenster nicht und Sie können darin weiterarbeiten. Oder zumindest dominieren sie das Terminalfenster nicht, wenn sie keine Bildschirmausgabe generieren.

Ein unordentliches Beispiel

Wir beginnen ein einfaches |_+_| Trace läuft . Wir gehen |_+_| die How-To-Geek-Domain. Dies wird als Vordergrundprozess ausgeführt.

help

Anzeige

Wir erhalten die erwarteten Ergebnisse, indem wir im Terminalfenster nach unten scrollen. Wir können im Terminalfenster nichts anderes tun, während |_+_| läuft. Um den Befehl zu beenden, drücken Sie |_+_|.

ping

Die sichtbare Wirkung des |_+_| ist im Screenshot hervorgehoben. |_+_| gibt eine kurze Zusammenfassung und stoppt dann.

Wiederholen wir das. Aber diesmal treffen wir |_+_| statt |_+_|. Die Aufgabe wird nicht beendet. Es wird zu einer Hintergrundaufgabe. Wir bekommen die Kontrolle über das Terminalfenster zurück.

ping ping

Der sichtbare Effekt des Schlagens |_+_| ist im Screenshot hervorgehoben.

Diesmal wird uns mitgeteilt, dass der Prozess gestoppt wird. Gestoppt bedeutet nicht beendet. Es ist wie ein Auto an einem Stoppschild. Wir haben es nicht verschrottet und weggeworfen. Es ist immer noch auf der Straße, steht und wartet darauf, zu gehen. Der Prozess ist jetzt ein Hintergrund Arbeit .

Die |_+_| Befehl wird die Jobs auflisten die in der aktuellen Terminalsitzung gestartet wurden. Und weil Jobs (unvermeidlich) Prozesse sind, können wir auch die |_+_| Befehl, sie zu sehen. Lassen Sie uns beide Befehle verwenden und ihre Ausgaben vergleichen. Wir verwenden die |_+_| Option (Terminal) Option, um nur die Prozesse aufzulisten, die in diesem Terminalfenster ausgeführt werden. Beachten Sie, dass kein Bindestrich erforderlich ist |_+_| mit dem |_+_| Möglichkeit.

Ctrl+C Ctrl+C

Die |_+_| Befehl sagt uns:

    [eins]: Die Zahl in eckigen Klammern ist die Auftragsnummer. 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. Er wird als Standardjob bezeichnet. Der Standardjob ist immer der Job, der zuletzt der Jobliste hinzugefügt wurde. Gestoppt: Der Prozess wird nicht ausgeführt. ping www.howtogeek.com: Die Befehlszeile, die den Prozess gestartet hat.

Die |_+_| Befehl sagt uns:

    PID: Die Prozess-ID des Prozesses. Jeder Prozess hat eine eindeutige ID. TTY: Der Pseudo-Fernschreiber (Terminalfenster), von dem aus der Prozess ausgeführt wurde. ZUSTAND: Der Status des Prozesses. ZEIT: Die vom Prozess verbrauchte CPU-Zeit. BEFEHL: Der Befehl, der den Prozess gestartet hat.

Dies sind allgemeine Werte für die Spalte STAT:

Starten Sie den Geräte-Manager über cmd
    D: Ununterbrochener Schlaf. Der Prozess befindet sich in einem Wartezustand, wartet normalerweise auf Eingabe oder Ausgabe und kann nicht unterbrochen werden. ich: Leerlauf. R: Betrieb. S: Unterbrechbarer Schlaf. T: Angehalten durch ein Auftragssteuersignal. MIT: Ein Zombie-Prozess. Der Prozess wurde beendet, aber nicht vom übergeordneten Prozess bereinigt.
Anzeige

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

    <: Aufgabe mit hoher Priorität (nicht nett zu anderen Prozessen). n: Niedrige Priorität (nett zu anderen Prozessen). L: Prozess hat Seiten im Speicher gesperrt (wird normalerweise von Echtzeitprozessen verwendet). S: Ein Sitzungsleiter. Ein Sitzungsleiter ist ein Prozess, der Prozessgruppen gestartet hat. Eine Shell ist ein Sitzungsleiter. L: Multi-Thread-Prozess. +: Ein Vordergrundprozess.

Wir können sehen, dass Bash einen Zustand von |_+_| hat. Das große S sagt uns, dass die Bash-Shell schläft und unterbrechbar ist. Sobald wir es brauchen, wird es antworten. Das kleine s sagt uns, dass die Shell ein Sitzungsleiter ist.

Der Ping-Befehl hat den Status |_+_|. Dies sagt uns, dass |_+_| wurde durch ein Auftragssteuersignal gestoppt. In diesem Beispiel war das |_+_| Wir haben es immer in den Hintergrund gestellt.

Die |_+_| Befehl hat den Status |_+_|, was für running steht. Die |_+_| gibt an, dass dieser Prozess ein Mitglied der Vordergrundgruppe ist. Also die |_+_| Befehl läuft im Vordergrund.

Das bg-Kommando

Die |_+_| Befehl wird verwendet, um einen Hintergrundprozess fortzusetzen. Es kann mit oder ohne Auftragsnummer verwendet werden. Wenn Sie ihn ohne Jobnummer verwenden, wird der Standardjob in den Vordergrund geholt. Der Vorgang läuft weiterhin im Hintergrund. Sie können ihm keine Eingaben senden.

Wenn wir das |_+_| . ausgeben Befehl, wir werden unsere |_+_| . wieder aufnehmen Befehl:

ping

Anzeige

Die |_+_| Der Befehl wird fortgesetzt und wir sehen erneut die scrollende Ausgabe im Terminalfenster. Der Name des neu gestarteten Befehls wird Ihnen angezeigt. Dies ist im Screenshot hervorgehoben.

Ping-Hintergrundprozess mit Ausgabe in einer Terminal-Witwe wieder aufgenommen

Aber wir haben ein Problem. Die Aufgabe wird im Hintergrund ausgeführt und akzeptiert keine Eingaben. Wie also stoppen wir es? |_+_| tut nichts. Wir können es sehen, wenn wir es eingeben, aber die Hintergrundaufgabe empfängt diese Tastenanschläge nicht, sodass sie weiterhin fröhlich klingelt.

Tatsächlich befinden wir uns jetzt in einem seltsamen Mischmodus. Wir können im Terminalfenster etwas eingeben, aber was wir eingeben, wird schnell von der scrollenden Ausgabe des |_+_| . weggefegt Befehl. Alles, was wir eingeben, wird im Vordergrund wirksam.

Um unsere Hintergrundaufgabe zu stoppen, müssen wir sie in den Vordergrund bringen und dann stoppen.

Das fg-Kommando

Die |_+_| Befehl bringt eine Hintergrundaufgabe in den Vordergrund. Genau wie das |_+_| Befehl kann er mit oder ohne Auftragsnummer verwendet werden. Die Verwendung mit einer Auftragsnummer bedeutet, dass es für einen bestimmten Auftrag ausgeführt wird. Bei Verwendung ohne Auftragsnummer wird der letzte Befehl verwendet, der in den Hintergrund gesendet wurde.

Wenn wir |_+_| . eingeben unser |_+_| Befehl wird in den Vordergrund gebracht. Die von uns eingegebenen Zeichen werden mit der Ausgabe des |_+_| . verwechselt Befehl, aber sie werden von der Shell bearbeitet, als ob sie wie gewohnt in der Befehlszeile eingegeben worden wären. Und tatsächlich ist aus Sicht der Bash-Shell genau das passiert.

Ctrl+Z

Anzeige

Und jetzt haben wir die |_+_| Befehl, der noch einmal im Vordergrund ausgeführt wird, können wir |_+_| . verwenden es zu töten.

Ctrl+C

Wir müssen die richtigen Signale senden

Das war nicht gerade schön. Offensichtlich funktioniert das Ausführen eines Prozesses im Hintergrund am besten, wenn der Prozess keine Ausgabe erzeugt und keine Eingabe erfordert.

Aber ob unordentlich oder nicht, unser Beispiel hat erreicht:

  • Einen Prozess in den Hintergrund stellen.
  • Wiederherstellen des Prozesses in einen laufenden Zustand im Hintergrund.
  • Den Prozess in den Vordergrund zurückbringen.
  • Beenden des Prozesses.

Wenn Sie |_+_| . verwenden und |_+_| , senden Sie Signale an den Prozess. Diese sind Kurze Wege der Verwendung der |_+_| Befehl. Es gibt 64 verschiedene Signale dass |_+_| kann senden. Verwenden Sie |_+_| in der Befehlszeile, um sie aufzulisten. |_+_| ist nicht die einzige Quelle dieser Signale. Einige von ihnen werden automatisch von anderen Prozessen innerhalb des Systems ausgelöst

Hier sind einige der am häufigsten verwendeten.

windows 10 netzwerknamen ändern
    SEUFZEND: Signal 1. Wird automatisch an einen Prozess gesendet, wenn das Terminal, in dem er läuft, geschlossen wird. UNTERSCHRIFT: Signal 2. Wird an einen Prozess gesendet, den Sie auf |_+_| drücken. Der Prozess wird unterbrochen und zum Beenden aufgefordert. SO VIEL: Signal 3. Wird an einen Prozess gesendet, wenn der Benutzer ein Quit-Signal sendet |_+_|. SIGKILL: Signal 9. Der Prozess wird sofort beendet und versucht nicht, sauber zu schließen. Der Prozess läuft nicht anmutig ab. SIGTERM: Signal 15. Dies ist das Standardsignal, das von |_+_| gesendet wird. Es ist das Standardsignal zum Beenden von Programmen. SIGTSTP: Signal 20. Wird an einen Prozess gesendet, wenn Sie |_+_| verwenden. Es stoppt den Prozess und stellt ihn in den Hintergrund.

Wir müssen die |_+_| . verwenden Befehl, um Signale auszugeben, denen keine Tastenkombinationen zugewiesen sind.

Weitere Jobkontrolle

Ein Prozess ist mit |_+_| . in den Hintergrund gerückt wird in den gestoppten Zustand versetzt. Wir müssen die |_+_| . verwenden Befehl, um es wieder zu starten. Ein Programm als laufenden Hintergrundprozess zu starten ist einfach. Fügen Sie ein kaufmännisches Und-Zeichen an |_+_| bis zum Ende der Befehlszeile.

Obwohl es am besten ist, dass Hintergrundprozesse nicht in das Terminalfenster schreiben, werden wir Beispiele verwenden, die dies tun. Wir brauchen etwas in den Screenshots, auf das wir uns beziehen können. Dieser Befehl startet eine Endlosschleife als Hintergrundprozess:

Anzeige

während wahr; echo Kyoceramita Loop Process; Schlaf 3; fertig &

Uns werden die Auftragsnummer und die Prozess-ID des Prozesses mitgeteilt. Unsere Auftragsnummer ist 1, und die Prozess-ID ist 1979. Wir können diese Kennungen verwenden, um den Prozess zu steuern.

Die Ausgabe unserer Endlosschleife beginnt im Terminalfenster zu erscheinen. Wie zuvor können wir die Befehlszeile verwenden, aber alle Befehle, die wir ausgeben, werden mit der Ausgabe des Schleifenprozesses vermischt.

ls

Ausgabe des Hintergrundschleifenprozesses durchsetzt mit der Ausgabe anderer Befehle

Um unseren Prozess zu stoppen, können wir |_+_| . verwenden um uns an die Jobnummer zu erinnern, und verwenden Sie dann |_+_|.

|_+_| meldet, dass unser Prozess die Jobnummer 1 ist. Um diese Nummer mit |_+_| . zu verwenden wir müssen ihm ein Prozentzeichen |_+_| voranstellen.

windows 10 touchtastatur deaktivieren
Ctrl+Z jobs

VERBUNDEN: So funktionieren Linux-Signale: SIGINT, SIGTERM und SIGKILL

|_+_| sendet die |_+_| Signal, Signalnummer 15, an den Prozess und dieser wird beendet. Beim nächsten Drücken der Eingabetaste wird der Status des Jobs angezeigt. Es listet den Prozess als beendet auf. Wenn der Prozess nicht auf die |_+_| . reagiert Befehl können Sie es eine Stufe höher nehmen. Verwenden Sie |_+_| mit |_+_| , Signal Nummer 9. Setzen Sie einfach die Nummer 9 zwischen |_+_| Befehl die Auftragsnummer.

ps

Dinge, die wir behandelt haben

    Strg+C: Sendet |_+_|, Signal 2, an den Prozess – falls er Eingaben akzeptiert – und weist ihn an, zu beenden. Strg+D: Sendet |_+_|, Signal 3, an den Prozess – wenn er Eingaben akzeptiert – und weist ihn an, ihn zu beenden. Strg+Z: Sendet |_+_|, Signal 20, an den Prozess und teilt ihm mit, dass er anhalten (suspendieren) und ein Hintergrundprozess werden soll. Arbeitsplätze: Listet die Hintergrundjobs auf und zeigt ihre Jobnummer an. bg Auftragsnummer : Startet einen Hintergrundprozess neu. Wenn Sie keine Jobnummer angeben, wird der letzte Prozess verwendet, der in eine Hintergrundaufgabe umgewandelt wurde. fg Auftragsnummer : bringt einen Hintergrundprozess in den Vordergrund und startet ihn neu. Wenn Sie keine Jobnummer angeben, wird der letzte Prozess verwendet, der in eine Hintergrundaufgabe umgewandelt wurde.
  • Befehlszeile & : Ein kaufmännisches Und-Zeichen hinzufügen |_+_| bis zum Ende einer Befehlszeile führt diesen Befehl als Hintergrundaufgabe aus, die ausgeführt wird.
  • töten % Auftragsnummer : Sendet |_+_|, Signal 15, an den Prozess, um ihn zu beenden. töten 9 % Auftragsnummer : Sendet |_+_|, Signal 9, an den Prozess und beendet ihn abrupt.

VERBUNDEN: So beenden Sie Prozesse über das Linux-Terminal

Linux-Befehle
Dateien Teer · pv · Katze · tac · chmod · Griff · unterschied · sed · Mit · Mann · geschoben · popd · fsck · Testdisk · seq · fd · pandoc · CD · $PFAD · awk · beitreten · jq · falten · einzigartig · Journalctl · Schwanz · Zustand · ls · fstab · rauswerfen · weniger · chgrp · chown · rev · suchen · Saiten · Typ · umbenennen · Postleitzahl · entpacken · montieren · ummount · Installieren · fdisk · mkfs · rm · rmdir · rsync · df · gpg · wir · Nano · mkdir · von · ln · Patch · Konvertieren · rclon · Fetzen · SRM
Prozesse alias · Bildschirm · oben · nett · renice · Fortschritt · strace · System · tmux · chsh · Geschichte · beim · Charge · kostenlos · die · dmesg · Benutzermod · ps · chroot · xargs · tty · kleiner Finger · lsof · vmstat · Auszeit · Mauer · ja · töten · Schlaf · sudo · seine · Zeit · groupadd · Benutzermod · Gruppen · lshw · stilllegen · neu starten · halt · ausschalten · passwd · lscpu · crontab · Datum · bg · fg
Vernetzung netstat · Klingeln · Traceroute · ip · ss · Wer ist · fail2ban · bmon · Sie · Finger · nmap · ftp · Locken · wget · Wer · Wer bin ich · In · iptables · ssh-keygen · ufw

VERBUNDEN: Beste Linux-Laptops für Entwickler und Enthusiasten

WEITER LESEN