Zurück zum Blog

Prozesse in Linux verwalten – eine Anleitung zur Verwendung von ps, kill und nice

Prozesse in Linux verwalten – eine Anleitung zur Verwendung von ps, kill und nice

Einführung

Wenn die meisten von uns Computer benutzen, führen wir verschiedene Anwendungen aus. Diese Anwendungen werden von Programmen ausgeführt, die Server oder Betriebssysteme genannt werden. Es gibt viele verschiedene Arten von Servern, die auf unterschiedliche Weise funktionieren. Einer davon ist Linux. Linux führt Anwendungen in Form von Prozessen aus.

Unter Linux bezeichnen wir jede Anwendung als „Prozess“. Der Server ist in der Lage, die Low-Level-Aspekte des Lebenszyklus des Prozesses zu verwalten. Als Benutzer müssen Sie möglicherweise mit dem Server interagieren, um einige High-Level-Aspekte zu manipulieren. Sie können mit dem Betriebssystem kommunizieren und es verwalten, indem Sie verschiedene Tools verwenden. Es gibt viele Befehle, mit denen Sie verschiedene Aspekte und Funktionen des Servers ändern können. Hier ist eine leicht verständliche Anleitung zur einfachen Einrichtung Ihres Linux-basierten Servers auf Ubuntu. Sie können außerdem lernen, wie Sie den LAMP-Stack (Linux, Apache, MySQL, PHP) installieren.

Diese Anleitung konzentriert sich darauf, wie Sie ps, kill und nice verwenden können, um Prozesse unter Linux zu verwalten.

Anzeigen laufender Prozesse unter Linux

  • top

Zu Beginn ist einer der grundlegendsten Befehle, die Sie kennen sollten, top. Dieses Tool hilft Ihnen zu visualisieren, welche Prozesse derzeit auf dem System ausgeführt werden. So sieht es aus, wenn Sie es ausführen:

top command output

 

Am oberen Rand des Ergebnisses finden Sie die Systemstatistiken. Dies gibt Ihnen Informationen über Dinge wie die Systemlast und eine Reihe von Aufgaben. In diesem Beispiel können Sie feststellen, dass es einen laufenden Prozess und 55 inaktive Prozesse gibt. Die inaktiven oder schlafenden Prozesse sind diejenigen, die Sie derzeit nicht verwenden. Das bedeutet, dass sie die Systemressourcen nicht belegen. Schließlich sehen Sie alle laufenden Prozesse im unteren Bereich des Popups mit den Nutzungsstatistiken.

  • htop

Bevor Sie diesen Befehl verwenden, müssen Sie ihn aus den Repositories installieren, indem Sie Folgendes eingeben und ausführen:

Sobald Sie es haben, können Sie es verwenden, um ähnliche Informationen wie mit top anzuzeigen. Der Hauptunterschied besteht darin, dass Sie mit dem Befehl htop ein benutzerfreundlicheres Ergebnis erhalten:

htop command output

Wie Sie sehen können, ist dieses Ergebnis leicht verständlich und zu interpretieren.

Verwendung von ps zur Auflistung von Prozessen

Obwohl Sie die oben genannten Befehle verwenden können, um laufende Prozesse anzuzeigen, decken sie möglicherweise nicht immer alle Szenarien ab. Glücklicherweise steht uns ein leistungsfähigeres und flexibleres Tool zur Verfügung. Dies ist der Befehl ps.

Lassen Sie uns untersuchen, was Sie sehen, wenn Sie den Befehl so ausführen, wie er ist:

ps command output

In dieser Ausgabe sehen Sie alle Prozesse, die im Zusammenhang mit dem aktuellen Benutzer und der aktuellen Sitzung ausgeführt werden. Dies gibt Ihnen jedoch nicht viele Informationen.

Wenn Sie eine ganzheitlichere Ansicht aller auf dem System laufenden Prozesse wünschen, müssen Sie ein Argument verwenden. Ein Argument ermöglicht es Ihnen, alle Prozesse zu sehen, die allen Benutzern gehören, unabhängig von der Terminal-Zuordnung. Die Ausgabe erscheint auch in einem sehr benutzerfreundlichen und leicht lesbaren Format. Hier ist ein Beispiel:

ps aux

Andererseits können Sie diese Informationen auch in einem Baumformat visualisieren. Hier werden, wie Sie sehen werden, auch die hierarchischen Beziehungen deutlich:

output in tree format

In diesem Beispiel können Sie sehen, wie kthreadd als übergeordneter Prozess der nachfolgenden Prozesse angezeigt wird.

  • Was sind Prozess-IDs?

Als Linux- oder Unix-Benutzer sollten Sie über Prozess-IDs Bescheid wissen. Diese auch als PIDs bekannten IDs sind eindeutige Identitäten, die jedem Prozess vom System zugewiesen werden. Über diese Identitäten verfolgt der Server jeden einzelnen Prozess. Um die PID eines bestimmten Prozesses zu erfahren, müssen Sie den Befehl pgrep wie folgt verwenden:

Wenn Sie Ihr System booten, startet der erste Prozess. Dieser Prozess wird init genannt. Standardmäßig erhält der init-Prozess die PID „1“. Sie können die PID dieses Prozesses wie folgt überprüfen:

Der init-Prozess hat dann die Aufgabe, alle anderen Programme oder Prozesse zu booten. Verständlicherweise haben die folgenden Prozesse ansteigende oder größere PIDs.

  • Was sind übergeordnete Prozesse?

Ein weiteres Konzept, das man kennen sollte, ist der Elternprozess. Wenn Prozess A den Prozess B erzeugt, dann ist Prozess A der Elternprozess von Prozess B. Um die Unterscheidung zu erleichtern, weist das System Elternprozessen eine PPID zu. Sie können diese PPID in den Spaltenüberschriften sehen, wenn Sie einen Verwaltungsbefehl wie top, htop oder ps ausführen.

  • Was sind Eltern-Kind-Beziehungen?

Wie wir bereits wissen, erzeugen Elternprozesse Kindprozesse. Diese Erstellung erfolgt in zwei Schritten. Der erste ist fork(). Dies beginnt mit der Erstellung eines neuen Adressraums. Zudem werden die Ressourcen des Elternprozesses mittels Copy-on-Write kopiert, sodass sie auch dem Kindprozess zur Verfügung stehen. Der zweite Schritt ist exec(). Dieser ist dafür verantwortlich, eine ausführbare Datei in den neu erstellten Adressraum zu laden und auszuführen.

  • Was passiert, wenn der Kindprozess vor dem Elternprozess stirbt?

In diesem Fall wird der Kindprozess zu einem Zombie. Das bleibt so lange der Fall, bis der Elternprozess Informationen über ihn sammelt oder dem Kernel mitteilt, dass er die zugehörigen Informationen nicht benötigt. Sobald dies geschieht, werden die vom Prozess genutzten Ressourcen wieder freigegeben.

  • Was passiert, wenn der Elternprozess vor dem Kindprozess stirbt?

In diesem Szenario weist das System den Kindprozess einem anderen Elternprozess zu. Dies kann init oder ein beliebiger anderer Prozess sein.

Senden von Signalen an Prozesse in Linux

Sie können einen bestimmten Prozess dazu bringen, auf Sie zu reagieren, indem Sie ein Signal senden. Signale helfen Ihnen, mit dem Betriebssystem zu kommunizieren. Sie können das Signal verwenden, um eine Anwendung zu beenden, zu starten oder ein bestimmtes Verhalten oder eine Aufgabe zu ändern.

  • Verwendung der PID zum Senden von Signalen

Eines der Dienstprogramme, mit denen Sie in Linux Signale senden können, ist kill. Dieser Befehl hilft Ihnen, wie der Name schon sagt, einen Prozess zu beenden oder zu töten:

Dieses Dienstprogramm sendet das TERM-Signal an den Prozess, was ihn anweist, den Prozess zu beenden. Der Befehl sorgt dafür, dass die Anwendung Bereinigungen durchführt und ordnungsgemäß beendet wird. Falls das Programm nach dem TERM-Signal nicht reibungslos beendet wird, können Sie dies erzwingen, indem Sie das KILL-Signal senden:

Dieses Signal geht nicht an das Programm. Es geht an den Kernel des Betriebssystems. Der Kernel wird den Prozess direkt beenden. Sie können dies verwenden, wenn ein Programm die Signale ignoriert, die Sie ihm senden.

In diesem Befehl können Sie den Namen des Signals auch durch die zugehörige Nummer ersetzen. Beispielsweise können Sie „-15“ anstelle von „-TERM“ verwenden. Ebenso können Sie „-KILL“ durch „-9“ ersetzen.

  • Verwendung von Signalen für verschiedene Zwecke

Sie können Signale auch für andere Dinge als das Beenden oder Töten von Programmen verwenden. Ein Problem, das Sie beispielsweise haben könnten, ist der Neustart von Daemons. Jedes Mal, wenn ein Daemon ein Hang-Up-Signal oder HUP empfängt, startet er in Programmen wie Apache neu. Um dies zu bewirken, können Sie das folgende Signal verwenden:

Dieser Befehl veranlasst Apache, seine Konfiguration neu zu laden. Dadurch wird er Ihnen weiterhin die relevanten Inhalte bereitstellen.

Wenn Sie sehen möchten, welche Signale Sie mit dem kill-Dienstprogramm senden können, verwenden Sie den folgenden Befehl:

list of signals

  • Senden von Signalen nach Name

Traditionell würden Sie ein Signal unter Verwendung der PID des Programms senden. Sie haben jedoch auch die Möglichkeit, Signale unter Verwendung des regulären Namens des Prozesses zu senden. Dazu können Sie den Befehl pkill verwenden. Er funktioniert ähnlich wie der Befehl kill. Der einzige Unterschied besteht darin, dass Sie den Prozessnamen verwenden können:

Dieser pkill-Befehl ist das Äquivalent zum folgenden kill-Befehl:

Sie haben auch einen Befehl für den Fall, dass Sie ein Signal an jede Instanz statt an einen bestimmten Prozess senden möchten. Der folgende Befehl sendet ein TERM-Signal an alle auf dem System laufenden Firefox-Instanzen:

Anpassen von Prozessprioritäten

Eine weitere Sache, die Sie mit Linux-Befehlen tun können, ist das Anpassen von Prioritäten. Das bedeutet, dass Sie entscheiden können, welcher Prozess in Ihrer Serverumgebung Priorität hat. Es kann bestimmte Prozesse geben, die Sie als kritisch erachten. Andere sind vielleicht nicht so notwendig. Das System führt die letztgenannten Programme erst aus, wenn noch Ressourcen übrig sind.

Sie können die Prozesspriorität in Linux über den Niceness-Befehl steuern. Dieser Wert kennzeichnet Aufgaben mit hoher Priorität als weniger nett (less nice) und Prozesse mit niedriger Priorität als netter (more nice). Stellen Sie sich das so vor: Prozesse mit hoher Priorität sind weniger nett, weil sie die Ressourcen horten. Aufgaben mit niedriger Priorität teilen sie, sind also netter.

Sie können den Nice-Wert eines bestimmten Prozesses sehen, wenn Sie den Befehl top ausführen. Dieser Wert befindet sich in der Spalte „NI“. Aufgaben mit hoher Priorität haben Nice-Werte im Bereich von „-19/-20“. Prozesse mit niedriger Priorität liegen im Bereich von „19/20“. Sie werden etwas Ähnliches wie das hier sehen:

Wenn Sie einen Prozess mit einem persönlich zugewiesenen Nice-Wert ausführen möchten, müssen Sie lediglich den Befehl nice verwenden:

Dieser Befehl funktioniert nur, wenn Sie das jeweilige Programm starten. Wenn Sie den Nice-Wert eines bereits laufenden Programms ändern möchten, müssen Sie renice verwenden:

Fazit

Wie Sie sehen können, unterscheiden sich die Tools hier stark von den grafischen Werkzeugen. Daher können sie für Anfänger schwer zu verstehen sein. Diese Anleitung wird Ihnen helfen, sich mit den Befehlen vertraut zu machen. Mehr Praxis wird Ihnen helfen, besser zu lernen und sie effizienter zu nutzen.

Sehen Sie sich unsere anderen Ressourcen an, die Ihnen helfen können, Ihre Linux-Server besser zu verwalten, einschließlich Tutorials zu wie Sie Ihren Linux-Server für die Verwendung der SSH-Schlüssel-basierten Authentifizierung konfigurieren, wie Sie Dateien auf Ihrem Linux-VPS-System mit whereis, which, whatis, readlink und find finden, und wie Sie Umgebungs- und Shell-Variablen auf einem Linux-VPS lesen und festlegen.

Viel Spaß beim Computing!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev ist ein kreativer Designer bei CloudSigma und konzentriert sich auf eine konsistente Unternehmensidentität durch traditionelle und innovative Marketingkanäle. Er versteht es meisterhaft, künstlerische Vision mit strategischem Marketing zu verbinden, um wirkungsvolle Markengeschichten zu schaffen.

Kommentare

Noch keine Kommentare. Schreiben Sie den ersten.