8 Befehle zur effektiven Verwaltung von Prozessen in Linux

8 Befehle zur effektiven Verwaltung von Prozessen in Linux

Vorwort

Die Rolle des Prozessmanagements:

  • Integritätsstatus des Servers ermitteln: Ermitteln Sie die Serverauslastung und den Sicherheitsstatus, indem Sie den Status der Prozesse (Speicher, CPU-Auslastung usw.) analysieren.
  • Alle Prozesse im System anzeigen
  • Beenden eines Prozesses

Dieser Artikel gibt Ihnen eine detaillierte Einführung in die Linux-Prozessverwaltungsbefehle und zeigt Ihnen, wie Sie diese wichtigen Befehle zum Verwalten Ihrer Anwendungen während des gesamten Prozesses verwenden.

Im Allgemeinen gibt es im Lebenszyklus eines Anwendungsprozesses drei Hauptzustände: Starten, Ausführen und Stoppen. Jeder Staat kann und sollte sorgfältig verwaltet werden, wenn wir kompetente Verwalter sein wollen. Mit diesen acht Befehlen kann der gesamte Lebenszyklus eines Prozesses verwaltet werden.

Starten Sie den Prozess

Am einfachsten starten Sie einen Prozess, indem Sie seinen Namen in die Befehlszeile eingeben und die Eingabetaste drücken. Wenn Sie den Nginx-Webserver starten möchten, geben Sie nginx ein. Vielleicht möchten Sie einfach nur die Version sehen.

alan@Arbeitsstation:~$ nginx

alan@Arbeitsstation:~$ nginx -v
Nginx-Version: nginx/1.14.0

Überprüfen Sie Ihren ausführbaren Pfad

Die obige Demonstration zum Starten eines Prozesses setzt voraus, dass sich die ausführbare Datei in Ihrem ausführbaren Pfad befindet. Das Verständnis dieses Pfades ist der Schlüssel zum zuverlässigen Starten und Verwalten von Prozessen. Administratoren passen diesen Pfad normalerweise für ihre gewünschten Zwecke an. Sie können echo $PATH verwenden, um Ihren ausführbaren Pfad anzuzeigen.

alan@Arbeitsstation:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

WELCHE

Verwenden Sie den Befehl „which“, um den vollständigen Pfad der ausführbaren Datei anzuzeigen.

alan@workstation:~$ welches nginx
/opt/nginx/bin/nginx

Als Beispiele verwende ich die beliebte Webserver-Software Nginx. Vorausgesetzt, Nginx ist installiert. Wenn der Befehl which nginx nichts zurückgibt, wurde Nginx nicht gefunden, da es nur den von Ihnen angegebenen ausführbaren Pfad durchsucht. Wenn ein Prozess nicht einfach über seinen Namen gestartet werden kann, können Sie dies auf drei Arten beheben. Die erste Möglichkeit besteht darin, den vollständigen Pfad einzugeben. Ich hasse es allerdings, den gesamten Pfad einzutippen. Sie etwa?

alan@Arbeitsstation:~$ /home/alan/web/prod/nginx/sbin/nginx -v
Nginx-Version: nginx/1.14.0

Die zweite Lösung besteht darin, die Anwendung in einem Verzeichnis zu installieren, das sich im Pfad der ausführbaren Datei befindet. Dies ist jedoch möglicherweise nicht immer möglich, insbesondere wenn Sie nicht über Root-Rechte verfügen.

Eine dritte Lösung besteht darin, Ihre Umgebungsvariable für den ausführbaren Pfad zu aktualisieren, um das Installationsverzeichnis der spezifischen Anwendung einzuschließen, die Sie verwenden möchten. Diese Lösung ist Shell-abhängig. Beispielsweise müssen Bash-Benutzer die Zeile PATH= in ihrer .bashrc-Datei bearbeiten.

PATH="$HOME/web/prod/nginx/sbin:$PATH"

Wiederholen Sie nun Ihre Echo- und Which-Befehle oder versuchen Sie, die Version zu überprüfen. Viel einfacher!

alan@Arbeitsstation:~$ echo $PATH
/home/alan/web/prod/nginx/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

alan@workstation:~$ welches nginx
/home/alan/web/prod/nginx/sbin/nginx

alan@Arbeitsstation:~$ nginx -v            
Nginx-Version: nginx/1.14.0

Halten Sie den Prozess am Laufen

Kein Aufheben

Wenn Sie sich abmelden oder das Terminal schließen, wird der Vorgang möglicherweise nicht weiter ausgeführt. Dieser Sonderfall kann gelöst werden, indem man den Befehl „nohup“ vor den auszuführenden Befehl setzt, um den Prozess am Laufen zu halten. Darüber hinaus können Sie durch Anhängen eines Et-Zeichens den Prozess in den Hintergrund verschieben und das Terminal weiterhin verwenden. Angenommen, Sie möchten myprogram.sh ausführen.

nohup meinprogramm.sh &

nohup gibt die PID des laufenden Prozesses zurück. Ich werde als nächstes mehr über PID sprechen.

Verwalten laufender Prozesse

Jeder Prozess hat eine eindeutige Prozessidentifikationsnummer (PID). Mit dieser Nummer verwalten wir die einzelnen Prozesse. Wir können auch den Prozessnamen verwenden, was ich weiter unten demonstrieren werde. Es gibt mehrere Befehle, um den Status laufender Prozesse zu überprüfen. Werfen wir einen kurzen Blick auf diese Befehle.

PS

Am gebräuchlichsten ist der Befehl ps. Die Standardausgabe von ps ist eine einfache Liste der Prozesse, die im aktuellen Terminal ausgeführt werden. Wie unten gezeigt, enthält die erste Spalte die PID.

alan@workstation:~$ ps
PID TTY ZEIT CMD
23989 Punkte/0 00:00:00 bash
24148 Punkte/0 00:00:00 Punkte

Ich möchte den Nginx-Prozess sehen, den ich zuvor gestartet habe. Dazu weise ich ps an, mir jeden laufenden Prozess ( -e ) und die vollständige Liste ( -f ) anzuzeigen.

alan@Arbeitsstation:~$ ps -ef
UID PID PPID C STIME TTY ZEIT CMD
root 1 0 0 Aug18 ? 00:00:10 /sbin/init splash
root 2 0 0 Aug18 ? 00:00:00 [kthreadd]
Wurzel 4 2 0 Aug18 ? 00:00:00 [kworker/0:0H]
Wurzel 6 2 0 Aug18 ? 00:00:00 [mm_percpu_wq]
root 7 2 0 Aug18 ? 00:00:00 [ksoftirqd/0]
root 8 2 0 Aug18 ? 00:00:20 [rcu_sched]
Wurzel 9 2 0 Aug18 ? 00:00:00 [rcu_bh]
root 10 2 0 Aug18 ? 00:00:00 [Migration/0]
Wurzel 11 2 0 Aug18 ? 00:00:00 [Watchdog/0]
Wurzel 12 2 0 Aug18 ? 00:00:00 [cpuhp/0]
Wurzel 13 2 0 Aug18 ? 00:00:00 [cpuhp/1]
Wurzel 14 2 0 Aug18 ? 00:00:00 [Watchdog/1]
Wurzel 15 2 0 Aug18 ? 00:00:00 [Migration/1]
Wurzel 16 2 0 Aug18 ? 00:00:00 [ksoftirqd/1]
alan 20506 20496 0 10:39 Punkte/0 00:00:00 bash
alan 20520 1454 0 10:39 ? 00:00:00 nginx: Master-Prozess nginx
alan 20521 20520 0 10:39 ? 00:00:00 nginx: Arbeitsprozess
alan 20526 20506 0 10:39 pts/0 00:00:00 Mann ps
alan 20536 20526 0 10:39 Punkte/0 00:00:00 Pager
alan 20564 20496 0 10:40 Punkte/1 00:00:00 bash

Sie können den Nginx-Prozess in der Ausgabe des obigen ps-Befehls sehen. Dieser Befehl zeigt fast 300 Zeilen an, aber ich habe ihn für dieses Beispiel gekürzt. Wie Sie sich vorstellen können, ist der Versuch, 300 Zeilen Prozessinformationen zu verarbeiten, etwas verwirrend. Wir können diese Ausgabe in grep weiterleiten, um sie so zu filtern, dass nur nginx angezeigt wird.

alan@Arbeitsstation:~$ ps -ef |grep nginx
alan 20520 1454 0 10:39 ? 00:00:00 nginx: Master-Prozess nginx
alan 20521 20520 0 10:39 ? 00:00:00 nginx: Arbeitsprozess

Es ist tatsächlich besser. Wir können schnell erkennen, dass Nginx die PIDs 20520 und 20521 hat.

PGREP

Der Befehl pgrep vereinfacht die Probleme, die beim alleinigen Aufruf von grep auftreten, noch weiter.

alan@Arbeitsstation:~$ pgrep nginx
20520
20521

Angenommen, Sie befinden sich in einer Hostingumgebung, in der mehrere Benutzer mehrere verschiedene Nginx-Instanzen ausführen. Mit der Option -u können Sie andere von der Ausgabe ausschließen.

alan@Arbeitsstation:~$ pgrep -u alan nginx
20520
20521

PIDOF

Ein weiteres praktisches Tool ist pidof. Dieser Befehl überprüft die PID einer bestimmten Binärdatei, auch wenn ein anderer Prozess mit demselben Namen ausgeführt wird. Um ein Beispiel aufzusetzen, habe ich mein Nginx in ein zweites Verzeichnis kopiert und mit dem entsprechenden Pfadpräfix gestartet. In der Realität kann sich diese Instanz an einem anderen Ort befinden, beispielsweise in einem Verzeichnis, das einem anderen Benutzer gehört. Wenn ich zwei Nginx-Instanzen ausführe, zeigt die Pidof-Ausgabe alle ihre Prozesse.

alan@Arbeitsstation:~$ ps -ef |grep nginx
alan 20881 1454 0 11:18 ? 00:00:00 nginx: Master-Prozess ./nginx -p /home/alan/web/prod/nginxsec
alan 20882 20881 0 11:18 ? 00:00:00 nginx: Arbeitsprozess
alan 20895 1454 0 11:19 ? 00:00:00 nginx: Master-Prozess nginx
alan 20896 20895 0 11:19 ? 00:00:00 nginx: Arbeitsprozess

Mit grep oder pgrep werden die PID-Nummern angezeigt, aber wir können möglicherweise nicht erkennen, welche Instanz welche ist.

alan@Arbeitsstation:~$ pgrep nginx
20881
20882
20895
20896

Mit dem Befehl pidof kann die PID jeder spezifischen Nginx-Instanz bestimmt werden.

alan@workstation:~$ pidof /home/alan/web/prod/nginxsec/sbin/nginx
20882 20881

alan@workstation:~$ pidof /home/alan/web/prod/nginx/sbin/nginx
20896 20895

SPITZE

Den Top-Befehl gibt es schon seit langer Zeit und er ist sehr nützlich, um Details laufender Prozesse anzuzeigen und Probleme wie den Speicherverbrauch schnell zu identifizieren. Die Standardansicht wird unten angezeigt.

oben – 11:56:28, 1 Tag aktiv, 13:37, 1 Benutzer, durchschnittliche Auslastung: 0,09, 0,04, 0,03
Aufgaben: 292 insgesamt, 3 laufend, 225 schlafend, 0 angehalten, 0 Zombie
% CPU(s): 0,1 us, 0,2 sy, 0,0 ni, 99,7 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
KiB-Speicher: 16387132 gesamt, 10854648 frei, 1859036 verwendet, 3673448 Buff/Cache
KiB-Austausch: 0 insgesamt, 0 frei, 0 verwendet. 14176540 verfügbare Mem

 PID USER PR NI VIRT RES SHR S %CPU %MEM ZEIT+ BEFEHL
17270 alan 20 0 3930764 247288 98992 R 0,7 1,5 5:58,22 Gnome-Shell
20496 alan 20 0 816144 45416 29844 S 0,5 0,3 0:22.16 Gnome-Terminal-
21110 alan 20 0 41940 3988 3188 R 0,1 0,0 0:00.17 oben
 1 Wurzel 20 0 225564 9416 6768 S 0,0 0,1 0:10,72 systemd
 2 Wurzel 20 0 0 0 0 S 0,0 0,0 0:00.01 kthreadd
 4 Wurzel 0 -20 0 0 0 I 0,0 0,0 0:00.00 kworker/0:0H
 6 Wurzel 0 -20 0 0 0 I 0,0 0,0 0:00,00 mm_percpu_wq
 7 Wurzel 20 0 0 0 0 S 0,0 0,0 0:00,08 ksoftirqd/0

Sie können das Aktualisierungsintervall ändern, indem Sie den Buchstaben „s“ und die gewünschte Anzahl von Sekunden für die Aktualisierungen eingeben. Um die Überwachung unseres Beispiel-Nginx-Prozesses zu vereinfachen, können wir top mit der Option -p aufrufen und die PID übergeben. Diese Ausgabe ist viel sauberer.

alan@Arbeitsstation:~$ top -p20881 -p20882 -p20895 -p20896

Aufgaben: 4 insgesamt, 0 laufen, 4 schlafen, 0 angehalten, 0 Zombie
% CPU(s): 2,8 us, 1,3 sy, 0,0 ni, 95,9 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
KiB-Speicher: 16387132 gesamt, 10856008 frei, 1857648 verwendet, 3673476 Buff/Cache
KiB-Austausch: 0 insgesamt, 0 frei, 0 verwendet. 14177928 verfügbare Mem

 PID USER PR NI VIRT RES SHR S %CPU %MEM ZEIT+ BEFEHL
20881 alan 20 0 12016 348 0 S 0,0 0,0 0:00.00 nginx
20882 alan 20 0 12460 1644 932 S 0,0 0,0 0:00.00 nginx
20895 alan 20 0 12016 352 0 S 0,0 0,0 0:00.00 nginx
20896 alan 20 0 12460 1628 912 S 0,0 0,0 0:00.00 nginx

Die korrekte Bestimmung der PID ist bei der Verwaltung von Prozessen, insbesondere bei deren Beendigung, sehr wichtig. Wenn top auf diese Weise verwendet wird, muss top außerdem jedes Mal, wenn einer dieser Prozesse stoppt oder ein neuer Prozess gestartet wird, über den neuen Prozess informiert werden.

Beenden eines Prozesses

TÖTEN

Interessanterweise gibt es keinen Stoppbefehl. Unter Linux gibt es den Kill-Befehl. „kill“ wird verwendet, um einem Prozess ein Signal zu senden. Die am häufigsten verwendeten Signale sind „terminate“ ( SIGTERM ) oder „kill“ ( SIGKILL ). Es gibt jedoch noch mehr. Hier sind einige Beispiele. Eine vollständige Liste kann mit kill -L angezeigt werden.

 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM

Beachten Sie, dass Signal Nr. 9 SIGKILL ist. Normalerweise würden wir einen Befehl wie kill -9 20896 ausgeben. Das Standardsignal ist 15, also SIGTERM. Bedenken Sie, dass viele Anwendungen über eigene Stoppmethoden verfügen. Nginx verwendet die Option -s, um Signale wie Stopp oder Neuladen zu übergeben. Im Allgemeinen bevorzuge ich die anwendungsspezifische Methode zum Stoppen einer Aktion. Ich werde jedoch demonstrieren, wie der Nginx-Prozess 20896 mit dem Kill-Befehl gestoppt wird, und anschließend mit pgrep bestätigen, dass er gestoppt wurde. PID 20896 wird nicht mehr angezeigt.

alan@Arbeitsplatz:~$ kill -9 20896
 
alan@Arbeitsstation:~$ pgrep nginx
20881
20882
20895
22123

PKILL

Der Befehl pkill ähnelt pgrep darin, dass er nach Namen suchen kann. Das bedeutet, dass Sie bei der Verwendung von pkill sehr vorsichtig sein müssen. Wenn ich in meinem Nginx-Beispiel nur eine Nginx-Instanz beenden wollte, würde ich mich wahrscheinlich nicht für deren Verwendung entscheiden. Ich kann die Nginx-Option -s stop an die jeweilige Instanz übergeben, um sie zu eliminieren, oder ich muss grep verwenden, um die gesamte PS-Ausgabe zu filtern.

/home/alan/web/prod/nginx/sbin/nginx -s stoppen
/home/alan/web/prod/nginxsec/sbin/nginx -s stoppen

Wenn ich pkill verwenden möchte, kann ich die Option -f einschließen, damit pkill die gesamten Befehlszeilenargumente filtert. Dies gilt natürlich auch für pgrep. Bevor ich pkill -f ausführe, kann ich es also zunächst mit pgrep -a bestätigen.

alan@Arbeitsstation:~$ pgrep -a nginx
20881 nginx: Masterprozess ./nginx -p /home/alan/web/prod/nginxsec
20882 nginx: Arbeitsprozess
20895 nginx: Master-Prozess nginx
20896 nginx: Arbeitsprozess

Ich kann auch pgrep -f verwenden, um meine Ergebnisse einzugrenzen. pkill mit denselben Argumenten stoppt den Vorgang.

alan@Arbeitsstation:~$ pgrep -f nginxsec
20881
           
alan@Arbeitsstation:~$ pkill -f nginxsec

Das Wichtigste, das Sie bei pgrep (und insbesondere pkill) beachten müssen, ist, dass Sie immer sicherstellen müssen, dass Ihre Suchergebnisse korrekt sind, damit Sie nicht versehentlich den falschen Prozess beeinflussen.

Die meisten dieser Befehle verfügen über zahlreiche Befehlszeilenoptionen. Ich empfehle daher, immer die Manpage zu jedem Befehl zu lesen. Obwohl die meisten dieser Befehle auf Plattformen wie Linux, Solaris und BSD vorhanden sind, gibt es einige Unterschiede. Führen Sie bei der Arbeit in der Befehlszeile oder beim Schreiben von Skripts stets Tests durch und seien Sie bereit, bei Bedarf Korrekturen vorzunehmen.

über: https://opensource.com/article/18/9/linux-commands-process-management

Autor: Alan Formy-Duval Thema: lujun9972 Übersetzer: heguangzhi Korrekturleser: wxy

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung und Beispiele zur Linux-Prozesssteuerung
  • Zusammenfassung der Befehle zur Steuerung von Prozessen in Linux
  • Detaillierte Erläuterung der Installation und Konfiguration von Supervisor (Linux/Unix-Prozessmanagementtool)
  • Grundlegendes Prozessmanagement und Analyse der Umgebungszusammensetzung bei Linux-Betrieb und -Wartung

<<:  Probleme mit Vue, das die Homepage von Bibibili imitiert

>>:  So schreiben Sie Konfigurationsdateien und verwenden MyBatis einfach

Artikel empfehlen

vue + springboot realisiert die Login-Funktion

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Erklärung von Prototypen und Prototypenketten in JavaScript

Inhaltsverzeichnis Prototyp-Kettendiagramm Grundl...

Bei der Verwendung von MySQL aufgetretene Probleme

Hier sind einige Probleme, die bei der Verwendung...

Vue implementiert Ankerpositionierungsfunktion

In diesem Artikelbeispiel wird der spezifische Co...

Anweisungen zur Verwendung des HTML-Tags dl dt dd

Grundaufbau: Code kopieren Der Code lautet wie fol...

JavaScript realisiert den Warteschlangenstrukturprozess

Inhaltsverzeichnis 1. Warteschlangen verstehen 2....

Auszeichnungssprache - CSS-Stile für Text festlegen

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...

Erstellen eines sekundären Menüs mit JavaScript

In diesem Artikelbeispiel wird der spezifische Ja...

Miniprogramm zur Implementierung des Paging-Effekts

In diesem Artikelbeispiel wird der spezifische Co...

HTML-Hyperlink ein Tag_Powernode Java Academy

Jeder, der HTML studiert oder verwendet hat, soll...