Vorwort Die Rolle des Prozessmanagements:
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 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 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 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 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 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:
|
<<: Probleme mit Vue, das die Homepage von Bibibili imitiert
>>: So schreiben Sie Konfigurationsdateien und verwenden MyBatis einfach
Ohne weitere Umschweife werde ich den Code direkt...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis Prototyp-Kettendiagramm Grundl...
Hier sind einige Probleme, die bei der Verwendung...
In diesem Artikelbeispiel wird der spezifische Co...
Grundaufbau: Code kopieren Der Code lautet wie fol...
Inhaltsverzeichnis 1. Abrufen über --skip-grant-t...
Inhaltsverzeichnis 1. Warteschlangen verstehen 2....
In diesem Artikel werden hauptsächlich die Unters...
Als ich kürzlich an meiner Website „Fußball-Navig...
Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...
Website-Administratoren löschen Website-Daten aus...
In diesem Artikelbeispiel wird der spezifische Ja...
In diesem Artikelbeispiel wird der spezifische Co...
Jeder, der HTML studiert oder verwendet hat, soll...