GNU/Linux >> LINUX-Kenntnisse >  >> Linux

8 Linux-Befehle für effektives Prozessmanagement

Im Allgemeinen hat der Lebenszyklus eines Anwendungsprozesses drei Hauptzustände:Start, Ausführung und Stopp. Jeder Staat kann und sollte sorgfältig verwaltet werden, wenn wir kompetente Verwalter sein wollen. Diese acht Befehle können verwendet werden, um Prozesse über ihren Lebenszyklus hinweg zu verwalten.

Starten eines Prozesses

Der einfachste Weg, einen Prozess zu starten, besteht darin, seinen Namen in der Befehlszeile einzugeben und die Eingabetaste zu drücken. Wenn Sie einen Nginx-Webserver starten möchten, geben Sie nginx ein . Vielleicht möchten Sie nur die Version überprüfen.

alan@workstation:~$ nginx

alan@workstation:~$ nginx -v
nginx-Version:nginx/1.14.0

Ihren ausführbaren Pfad anzeigen

Die obige Demonstration zum Starten eines Prozesses geht davon aus, dass sich die ausführbare Datei in Ihrem ausführbaren Pfad befindet. Das Verständnis dieses Pfads ist der Schlüssel zum zuverlässigen Starten und Verwalten eines Prozesses. Administratoren passen diesen Pfad häufig für ihren gewünschten Zweck an. Sie können Ihren ausführbaren Pfad mit echo $PATH anzeigen .

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

WELCHE

Verwenden Sie den which-Befehl, um den vollständigen Pfad einer ausführbaren Datei anzuzeigen.

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

Ich werde für meine Beispiele die beliebte Webserver-Software Nginx verwenden. Nehmen wir an, dass Nginx installiert ist. Wenn der Befehl what nginx gibt nichts zurück, dann wurde Nginx nicht gefunden, da nur Ihr definierter ausführbarer Pfad gesucht wird. Es gibt drei Möglichkeiten, eine Situation zu beheben, in der ein Prozess nicht einfach mit dem Namen gestartet werden kann. Die erste besteht darin, den vollständigen Pfad einzugeben. Obwohl ich das alles lieber nicht tippen müsste, oder?

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

Das Linux-Terminal

  • Die 7 besten Terminalemulatoren für Linux
  • 10 Befehlszeilentools für die Datenanalyse unter Linux
  • Jetzt herunterladen:SSH-Spickzettel
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Linux-Befehlszeilen-Tutorials

Die zweite Lösung wäre, die Anwendung in einem Verzeichnis im Pfad Ihrer ausführbaren Datei zu installieren. Dies ist jedoch möglicherweise nicht möglich, insbesondere wenn Sie keine Root-Rechte haben.

Die dritte Lösung besteht darin, die Umgebungsvariable für den ausführbaren Pfad so zu aktualisieren, dass sie das Verzeichnis enthält, in dem die spezifische Anwendung, die Sie verwenden möchten, installiert ist. Diese Lösung ist Shell-abhängig. Beispielsweise müssten Bash-Benutzer die Zeile PATH=in ihrer .bashrc-Datei bearbeiten.

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

Wiederholen Sie nun Ihr Echo und welche Befehle oder versuchen Sie, die Version zu überprüfen. Viel einfacher!

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

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

alan@workstation:~$ nginx -v                                                
nginx-Version:nginx/1.14.0

Einen Prozess am Laufen halten

NOHUP

Ein Prozess wird möglicherweise nicht weiter ausgeführt, wenn Sie sich abmelden oder Ihr Terminal schließen. Dieser Sonderfall kann vermieden werden, indem Sie dem Befehl, den Sie ausführen möchten, den Befehl nohup voranstellen. Wenn Sie außerdem ein kaufmännisches Und (&) anhängen, wird der Prozess in den Hintergrund verschoben und Sie können das Terminal weiterhin verwenden. Angenommen, Sie möchten myprogram.sh.

ausführen
nohup myprogram.sh & 

Eine nette Sache, die nohup macht, ist die PID des laufenden Prozesses zurückzugeben. Ich werde als nächstes mehr über die PID sprechen.

Einen laufenden Prozess verwalten

Das Linux-Terminal

  • Die 7 besten Terminalemulatoren für Linux
  • 10 Befehlszeilentools für die Datenanalyse unter Linux
  • Jetzt herunterladen:SSH-Spickzettel
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Linux-Befehlszeilen-Tutorials

Jeder Prozess erhält eine eindeutige Prozessidentifikationsnummer (PID). Diese Nummer verwenden wir, um jeden Prozess zu verwalten. Wir können auch den Prozessnamen verwenden, wie ich unten zeigen werde. Es gibt mehrere Befehle, die den Status eines laufenden Prozesses überprüfen können. Werfen wir einen kurzen Blick auf diese.

PS

Die häufigste ist PS. Die Standardausgabe von ps ist eine einfache Liste der Prozesse, die in Ihrem aktuellen Terminal ausgeführt werden. Wie Sie unten sehen können, enthält die erste Spalte die PID.

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

Ich möchte den zuvor gestarteten Nginx-Prozess anzeigen. Dazu sage ich ps, dass es mir jeden laufenden Prozess zeigen soll (-e ) und eine vollständige Auflistung (-f ).

alan@workstation:~$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Aug18 ? 00:00:10 /sbin/init splash
root         2     0  0 Aug18 ? 00:00:00 [kthreadd]
root         4     2  0 Aug18 ? 00:00:00 [kworker/0:0H]
root         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]
root         9     2  0 Aug18 ? 00:00:00 [rcu_bh]
root        10     2  0 Aug18 ? 00:00:00 [migration/0]
root        11     2  0 Aug18 ? 00:00:00 [watchdog/0]
root        12     2  0 Aug18 ? 00:00:00 [cpuhp/0]
root        13     2  0 Aug18 ? 00:00:00 [cpuhp/1]
root        14     2  0 Aug18 ? 00:00:00 [watchdog/1]
root        15     2  0 Aug18 ? 00:00:00 [migration/1]
root        16     2  0 Aug18 ? 00:00:00 [ksoftirqd/1]
alan     20506 20496  0 10:39 pts/0    00:00:00 bash
alan     20520  1454  0 10:39 ? 00:00:00 nginx:Meisterprozess nginx
alan     20521 20520  0 10:39 ? 00:00:00 nginx:worker process
alan     20526 20506  0 10:39 pts/0    00:00:00 man ps
alan     20536 20526  0 10:39 pts/0    00:00:00 Pager
alan     20564 20496  0 10:40 pts/1    00:00:00 bash

Sie können die Nginx-Prozesse in der Ausgabe des obigen Befehls ps sehen. Der Befehl zeigte fast 300 Zeilen an, aber ich habe ihn für diese Illustration gekürzt. Wie Sie sich vorstellen können, ist der Versuch, 300 Zeilen an Prozessinformationen zu verarbeiten, etwas chaotisch. Wir können diese Ausgabe an grep weiterleiten, um nginx herauszufiltern.

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

Das ist besser. Wir können schnell erkennen, dass Nginx die PIDs 20520 und 20521 hat.

PGREP

Der pgrep-Befehl wurde erstellt, um die Dinge weiter zu vereinfachen, indem die Notwendigkeit entfällt, grep separat aufzurufen.

alan@workstation:~$ pgrep nginx
20520
20521

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

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

PIDOF

Ein weiteres nettes ist pidof. Dieser Befehl überprüft die PID einer bestimmten Binärdatei, selbst 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 entsprechend gesetzten Präfix gestartet. Im wirklichen Leben könnte sich diese Instanz an einem anderen Ort befinden, z. B. in einem Verzeichnis, das einem anderen Benutzer gehört. Wenn ich beide Nginx-Instanzen ausführe, wird die ps -ef Ausgabe zeigt alle ihre Prozesse.

alan@workstation:~$ ps -ef |grep nginx
alan     20881  1454  0 11:18 ? 00:00:00 nginx:master process ./nginx -p /home/alan/web/prod/nginxsec
alan     20882 20881  0 11:18 ? 00:00:00 nginx:worker process
alan     20895  1454  0 11:19 ? 00:00:00 nginx:Meisterprozess nginx
alan     20896 20895  0 11:19 ? 00:00:00 nginx:Arbeitsprozess

Die Verwendung von grep oder pgrep zeigt PID-Nummern, aber wir können möglicherweise nicht erkennen, welche Instanz welche ist.

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

Der Befehl pidof kann verwendet werden, um die PID jeder spezifischen Nginx-Instanz zu ermitteln.

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

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

TOP

Der top-Befehl gibt es schon seit langem und ist sehr nützlich, um Details laufender Prozesse anzuzeigen und Probleme wie Speicherfresser schnell zu identifizieren. Die Standardansicht ist unten dargestellt.

top - 11:56:28 up 1 Tag, 13:37,  1 Nutzer,  Auslastungsdurchschnitt:0,09, 0,04, 0,03
Aufgaben:292 insgesamt,   3 laufen, 225 schlafen,   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 /cache
KiB-Swap:       0 insgesamt,        0 kostenlos,        0 verwendet. 14176540 Hilzem MEM

PID User PR Ni Virt RES Shr S% CPU% MEM TIME + Befehl
17270 ALAN 20 0 3930764 247288 98992 R 0,7 1,5 5:58.22 GNOME-SHALL
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 root 0 -20 0 0 0 i 0.0 0.0 0:00.00 Kworker / 0:0h
6 root 0 -20       0      0      0 I   0.0  0.0   0:00.00 mm_percpu_wq
    7 root      20   0       0      0      0 S   0.0  0.0   0:00.08 k
.qd/

Das Aktualisierungsintervall kann durch Eingabe des Buchstabens s geändert werden gefolgt von der Anzahl der Sekunden, die Sie für Updates bevorzugen. Um die Überwachung unserer beispielhaften Nginx-Prozesse zu vereinfachen, können wir top aufrufen und die PID(s) mit -p übergeben Möglichkeit. Diese Ausgabe ist viel sauberer.

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

Aufgaben:  4 insgesamt,   0 ausgeführt,   4 schlafend,   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 insgesamt, 10856008 kostenlos, 1857648 verwendet, 3673476 Buff/Cache
KicheB Tauschen:       0 insgesamt,        0 kostenlos,        0 verwendet. 14177928 AvIAL MEM

PID User PR Ni Virt RES SHR S% CPU% MEM TIME + 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

Es ist wichtig, die PID beim Verwalten von Prozessen, insbesondere beim Stoppen, korrekt zu bestimmen. Wenn Sie top auf diese Weise verwenden, muss top jedes Mal, wenn einer dieser Prozesse gestoppt oder ein neuer gestartet wird, über die neuen informiert werden.

Stoppen eines Prozesses

TÖTEN

Interessanterweise gibt es keinen Stoppbefehl. Unter Linux gibt es den Kill-Befehl. Kill wird verwendet, um ein Signal an einen Prozess zu senden. Das am häufigsten verwendete Signal ist „terminate“ (SIGTERM) oder „kill“ (SIGKILL). Es gibt jedoch noch viele mehr. Nachfolgend finden Sie einige Beispiele. Die 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) SIGSGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM     15) SIGTERM

Beachten Sie, dass Signal Nummer neun SIGKILL ist. Normalerweise geben wir einen Befehl wie kill -9 20896 aus . Das Standardsignal ist 15, was SIGTERM ist. Denken Sie daran, dass viele Anwendungen ihre eigene Methode zum Stoppen haben. Nginx verwendet ein -s Option zum Übergeben eines Signals wie „Stopp“ oder „Nachladen“. Im Allgemeinen ziehe ich es vor, die spezifische Methode einer Anwendung zu verwenden, um eine Operation zu stoppen. Ich werde jedoch den kill-Befehl demonstrieren, um den Nginx-Prozess 20896 zu stoppen, und dann mit pgrep bestätigen, dass er gestoppt wurde. Die PID 20896 erscheint nicht mehr.

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

PKILL

Der Befehl pkill ähnelt pgrep darin, dass er nach Namen suchen kann. Dies bedeutet, dass Sie bei der Verwendung von pkill sehr vorsichtig sein müssen. In meinem Beispiel mit Nginx entscheide ich mich möglicherweise nicht dafür, es zu verwenden, wenn ich nur eine Nginx-Instanz beenden möchte. Ich kann die Nginx-Option -s übergeben Stopp zu einer bestimmten Instanz, um es zu beenden, oder ich muss grep verwenden, um nach der vollständigen ps-Ausgabe zu filtern.

/home/alan/web/prod/nginx/sbin/nginx -s stop

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

Wenn ich pkill verwenden möchte, kann ich das -f einfügen Option, um pkill aufzufordern, über das vollständige Befehlszeilenargument zu filtern. Dies gilt natürlich auch für pgrep. Also kann ich zuerst mit pgrep -a nachsehen bevor Sie pkill -f ausgeben .

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

Ich kann mein Ergebnis auch mit pgrep -f eingrenzen . Das gleiche Argument, das mit pkill verwendet wird, stoppt den Prozess.

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

Das Wichtigste, woran Sie bei pgrep (und insbesondere pkill) denken sollten, ist, dass Sie sich immer sicher sein müssen dass Ihr Suchergebnis korrekt ist, sodass Sie nicht unbeabsichtigt die falschen Prozesse beeinflussen.

Die meisten dieser Befehle haben viele Befehlszeilenoptionen, daher empfehle ich immer, die Manpage zu jedem einzelnen zu lesen. Während die meisten davon auf Plattformen wie Linux, Solaris und BSD existieren, gibt es einige Unterschiede. Testen Sie immer und seien Sie bereit, bei Bedarf Korrekturen vorzunehmen, wenn Sie an der Befehlszeile arbeiten oder Skripts schreiben.


Linux
  1. Meine Lieblings-Linux-Befehle zum Optimieren von Webbildern

  2. Spickzettel für allgemeine Linux-Befehle

  3. 12 nützliche Befehle zum Filtern von Text für effektive Dateioperationen in Linux

  4. 10 Linux-Befehle für die Netzwerkdiagnose

  5. Linux-Befehle:So manipulieren Sie die Prozesspriorität

Wie beendet man einen Prozess in Linux? Befehle zum Beenden

30 Top-Befehlsbeispiele für die Überwachung unter Linux

Die wichtigsten Linux-Befehle für Systemadministratoren

Linux-Prozessverwaltung mit htop verbessert

Gruppenverwaltungsbefehle in Linux

Befehle für das Prozessmanagement in Linux