Einführung
Ein Linux-Server führt wie jeder andere Computer, mit dem Sie möglicherweise vertraut sind, Anwendungen aus. Für den Computer gelten diese als „Prozesse“.
Während Linux die Verwaltung hinter den Kulissen auf niedriger Ebene im Lebenszyklus eines Prozesses übernimmt, benötigen Sie eine Möglichkeit, mit dem Betriebssystem zu interagieren, um es von einer höheren Ebene aus zu verwalten.
In diesem Handbuch werden einige einfache Aspekte des Prozessmanagements erläutert. Linux bietet eine reichhaltige Sammlung von Tools für diesen Zweck.,
Wir werden diese Ideen auf einem Ubuntu 12.04 VPS untersuchen, aber jede moderne Linux-Distribution wird auf ähnliche Weise funktionieren.
So zeigen Sie laufende Prozesse unter Linux an
top
Der einfachste Weg, um herauszufinden, welche Prozesse auf Ihrem Server ausgeführt werden, besteht darin, den Befehl top
auszuführen:
top
Der oberste Teil der Informationen enthält Systemstatistiken wie die Systemlast und die Gesamtzahl der Aufgaben.
Sie können leicht sehen, dass 1 Prozess ausgeführt wird und 55 Prozesse im Ruhezustand sind (auch bekannt als Leerlauf/ohne CPU-Ressourcen).,
Der untere Teil enthält die laufenden Prozesse und deren Nutzungsstatistiken.
htop
Eine verbesserte Version von top
mit dem Namen htop
ist in den Repositories verfügbar. Installieren Sie es mit diesem Befehl:
sudo apt-get install htop
Wenn wir den Befehl htop
ausführen, sehen wir, dass es eine benutzerfreundlichere Anzeige gibt:
htop
Sie können hier mehr über die Verwendung von top und htop erfahren.,
Verwendung von ps zum Auflisten von Prozessen
Sowohl top
als auch htop
bieten eine schöne Oberfläche zum Anzeigen laufender Prozesse ähnlich einem grafischen Task-Manager.
Diese Tools sind jedoch nicht immer flexibel genug, um alle Szenarien angemessen abzudecken. Ein leistungsfähiger Befehl namens ps
ist oft die Antwort auf diese Probleme.,
Wenn ohne Argumente aufgerufen wird, kann die Ausgabe ein wenig mangelhaft sein:
ps
PID TTY TIME CMD 1017 pts/0 00:00:00 bash 1262 pts/0 00:00:00 ps
Diese Ausgabe zeigt alle Prozesse an, die dem aktuellen Benutzer und der Terminalsitzung zugeordnet sind. Dies ist sinnvoll, da wir derzeit nur bash
und ps
mit diesem Terminal ausführen.,
Um ein vollständigeres Bild der Prozesse auf diesem System zu erhalten, können wir Folgendes ausführen:
ps aux
Diese Optionen weisen ps
an, Prozesse aller Benutzer (unabhängig von ihrer Terminalzuweisung) in einem benutzerfreundlichen Format anzuzeigen.
Um eine Baumansicht anzuzeigen, in der hierarchische Beziehungen dargestellt sind, können wir den Befehl mit folgenden Optionen ausführen:
ps axjf
Wie Sie sehen können, ist der Prozess kthreadd
ein übergeordnetes Element des Prozesses ksoftirqd/0
und der anderen.,
Ein Hinweis zu Prozess-IDs
In Linux-und Unix-ähnlichen Systemen wird jedem Prozess eine Prozess-ID oder PID zugewiesen. So identifiziert und verfolgt das Betriebssystem Prozesse.
Eine schnelle Möglichkeit, die PID eines Prozesses abzurufen, ist der Befehl pgrep
:
pgrep bash
1017
Dies fragt einfach die Prozess-ID ab und gibt sie zurück.
Der erste beim Booten erzeugte Prozess, init genannt, erhält die PID von „1“.,
pgrep init
1
Dieser Prozess ist dann für das Laichen jedes anderen Prozesses auf dem System verantwortlich. Die späteren Prozesse erhalten größere PID-Zahlen.
Das übergeordnete Element eines Prozesses ist der Prozess, der für das Laichen verantwortlich war. Übergeordnete Prozesse haben eine PPID, die Sie in den Spaltenüberschriften in vielen Prozessverwaltungsanwendungen sehen können, einschließlich top
, htop
und ps
.,
Jede Kommunikation zwischen dem Benutzer und dem Betriebssystem über Prozesse beinhaltet die Übersetzung zwischen Prozessnamen und PIDs zu einem bestimmten Zeitpunkt während des Vorgangs. Deshalb sagen Dienstprogramme Ihnen die PID.
Eltern-Kind-Beziehungen
Das Erstellen eines untergeordneten Prozesses erfolgt in zwei Schritten: fork(), das einen neuen Adressraum erstellt und die Ressourcen des übergeordneten Prozesses über copy-on-write kopiert, um für den untergeordneten Prozess verfügbar zu sein; und exec (), das eine ausführbare Datei in den Adressraum lädt und ausführt.,
Für den Fall, dass ein untergeordneter Prozess vor seinem Elternteil stirbt, wird das Kind zum Zombie, bis das Elternteil Informationen darüber gesammelt oder dem Kernel mitgeteilt hat, dass es diese Informationen nicht benötigt. Die Ressourcen aus dem untergeordneten Prozess werden dann freigegeben. Wenn der übergeordnete Prozess jedoch vor dem untergeordneten Prozess stirbt, wird das untergeordnete Element von init übernommen, kann jedoch auch einem anderen Prozess zugewiesen werden.
So senden Sie Prozesssignale in Linux
Alle Prozesse in Linux reagieren auf Signale. Signale sind eine Möglichkeit auf Betriebssystemebene, Programme anzuweisen, ihr Verhalten zu beenden oder zu ändern.,
Senden von Prozesssignalen per PID
Die gebräuchlichste Methode zum Übergeben von Signalen an ein Programm ist der Befehl kill
.
Wie Sie vielleicht erwarten, ist die Standardfunktionalität dieses Dienstprogramms, um zu versuchen, einen Prozess zu töten:
<kill<span class=“highlight“>PIDoftarget_process</span>
</pre>
Hiermit wird das TERMSIGNAL an den Prozess gesendet., Der BEGRIFF Signal weist den Prozess an, bitte zu beenden. Auf diese Weise kann das Programm Bereinigungsvorgänge ausführen und reibungslos beenden.,
Wenn sich das Programm schlecht verhält und bei Angabe des Begriffssignals nicht beendet wird, können wir das Signal eskalieren, indem wir die KILL
Signal:
<>
kill-KILL <span class=“highlight“>PIDoftarget_process</span>
</pre>
Dies ist ein spezielles Signal, das nicht an das Programm gesendet wird.,
Stattdessen wird es dem Betriebssystemkern gegeben, der den Prozess herunterfährt. Dies wird verwendet, um Programme zu umgehen, die die an sie gesendeten Signale ignorieren.
Jedem Signal ist eine Nummer zugeordnet, die anstelle des Namens übergeben werden kann. Sie können beispielsweise „-15“ anstelle von „-TERM“ und „-9“ anstelle von „-KILL“übergeben.
Verwendung von Signalen für andere Zwecke
Signale werden nicht nur zum Herunterfahren von Programmen verwendet. Sie können auch verwendet werden, um andere Aktionen auszuführen.
Zum Beispiel werden viele Daemons neu gestartet, wenn ihnen die HUP
oder das Auflegesignal gegeben wird., Apache ist ein Programm, das so funktioniert.
<pre>
sudo kill -HUP <span class=“highlight“>pidofapache</span>
</pre>
Der obige Befehl veranlasst den Apache neu zu laden, die Konfigurationsdatei und fortsetzen, die Inhalte bereitstellen.,
Sie können alle Signale auflisten, die mit kill gesendet werden können, indem Sie Folgendes eingeben:
kill -l
So senden Sie Prozesssignale nach Namen
Obwohl die herkömmliche Art des Sendens von Signalen die Verwendung von PIDs ist, gibt es auch Methoden, dies mit regulären Prozessnamen zu tun.,
Der Befehl pkill
funktioniert fast genau so wie kill
, aber er arbeitet stattdessen mit einem Prozessnamen:
pkill -9 ping
Der obige Befehl entspricht:
kill -9 `pgrep ping`
Wenn Sie ein Signal senden möchten, jede Instanz eines bestimmten Prozesses können Sie den Befehl killall
verwenden:
killall firefox
Der obige Befehl sendet das TERM-Signal an jede Instanz von Firefox, die auf dem Computer ausgeführt wird.,
So passen Sie die Prozessprioritäten an
Häufig möchten Sie anpassen, welchen Prozessen in einer Serverumgebung Priorität eingeräumt wird.
Einige Prozesse können als missionskritisch für Ihre Situation angesehen werden, während andere ausgeführt werden können, wenn Ressourcen übrig bleiben.
Linux steuert die Priorität über einen Wert namens netteness.
Aufgaben mit hoher Priorität gelten als weniger nett, da sie auch keine Ressourcen gemeinsam nutzen. Prozesse mit niedriger Priorität sind dagegen nett, weil sie darauf bestehen, nur minimale Ressourcen zu verwenden.,
Als wir top
am Anfang des Artikels liefen, gab es eine Spalte mit der Bezeichnung „NI“. Dies ist der Nice-Wert des Prozesses:
top
Nice-Werte können je nach System zwischen“ -19/-20 „(höchste Priorität) und“ 19/20 “ (niedrigste Priorität) liegen.,
To run a program with a certain nice value, we can use the nice
command:
<pre>
nice -n 15 <span class=“highlight”>commandtoexecute</span>
</pre>
This only works when beginning a new program.,=“9b4b74b24a“>:
<pre>
renice 0 <span class=“highlight“>PIDtoprioritize<div>/span>
</pre>
Hinweis: Während nice notwendigerweise mit einem Befehlsnamen arbeitet, ruft renice den Prozess auf PID
Prozessmanagement ist ein Thema, das für neue Benutzer manchmal schwer zu verstehen ist, da sich die verwendeten Tools von ihren grafischen unterscheiden.gegenstücke.,
Die Ideen sind jedoch vertraut und intuitiv und werden mit ein wenig Übung natürlich. Da Prozesse an allem beteiligt sind, was Sie mit einem Computersystem tun, ist das Erlernen einer effektiven Steuerung eine wesentliche Fähigkeit.
<div class= „author“ >Von Justin Ellingwood< / div>
Leave a Reply