Harting Development

Linux: Einen Prozess anhand der PID beenden

Lukas Fuchs vor 8 Monaten in  Betriebssysteme 3 Minuten Lesedauer

Was ist eine PID und wie finde ich sie?

Was ist eine PID?

Eine PID (Process Identifier) ist eine eindeutige Nummer, die vom Betriebssystem jedem aktiven Prozess zugewiesen wird. Sie dient zur Identifizierung und Kontrolle von laufenden Programmen.

Wie finde ich die PID eines Prozesses?

Es gibt mehrere Möglichkeiten, die PID eines Prozesses zu finden:

  • Kommandozeilenbefehle:

    • ps aux: Listet alle Prozesse zusammen mit ihren PIDs auf.
    • pidof <Befehlsname>: Gibt die PID des angegebenen Befehls zurück.
  • Grafische Tools:

    • System Monitor: Unter Linux kannst du den System Monitor öffnen, um die Liste der laufenden Prozesse und ihre PIDs anzuzeigen.
    • Task Manager: Unter Ubuntu kannst du den Task Manager (Strg + Alt + Esc) öffnen, um die PIDs von Prozessen zu finden.
  • Skripte:

    Du kannst ein einfaches Bash-Skript schreiben, um die PID eines Prozesses zu finden:

    #!/bin/bash
    PID=$(pgrep <Befehlsname>)
    echo $PID
    

Ursachen für den Fehler "Permission denied" beim Beenden eines Prozesses

Wenn du den Befehl kill verwendest, um einen Prozess anhand seiner PID zu beenden, und die Meldung "Permission denied" erhältst, bedeutet dies, dass du nicht über die erforderlichen Berechtigungen verfügst, um diesen Prozess zu beenden. Dies kann aus mehreren Gründen der Fall sein:

Fehlende Eigentümerberechtigungen

Wenn du nicht der Eigentümer des Prozesses bist, den du beenden möchtest, benötigst du Root-Berechtigungen (oder administrative Berechtigungen unter Windows), um ihn zu beenden. Dies liegt daran, dass die Berechtigung zum Beenden eines Prozesses normalerweise nur dem Eigentümer dieses Prozesses oder einem Administrator erteilt wird.

Sicherheitseinschränkungen

Einige Betriebssysteme wie Linux und macOS verfügen über Sicherheitseinschränkungen, die dich daran hindern, bestimmte Prozesse zu beenden. Beispielsweise kann es dir nicht gestattet sein, Prozesse zu beenden, die für die Aufrechterhaltung des Betriebssystems unerlässlich sind.

Sperrende Ressourcennutzung

Wenn der Prozess, den du beenden möchtest, gerade eine wichtige Ressource wie eine Datei oder einen Socket verwendet, kann es sein, dass er nicht beendet werden kann, bis er die Ressource freigibt. Dies kann zu einer Situation führen, die als "Ressourcenblockierung" bezeichnet wird.

Verwendung der falschen Signalart

Der Befehl kill sendet standardmäßig das TERM-Signal, das einen Prozess normalerweise sauber beendet. Wenn der Prozess das TERM-Signal nicht verarbeitet oder erwartet, kann das Senden des KILL-Signals mit der Option -9 erforderlich sein.

Behebung des Fehlers "Permission denied"

Um den Fehler "Permission denied" beim Beenden eines Prozesses zu beheben, kannst du versuchen:

  • Als Root- oder Administratorbenutzer einzuloggen
  • Die Verwendung des sudo-Befehls vor dem Befehl kill
  • Das Senden des KILL-Signals mit der Option -9
  • Die Freigabe jeglicher von dem Prozess gehaltenen Ressourcen
  • Die Verwendung eines anderen Befehls zum Beenden des Prozesses, z. B. pkill oder killall

Beenden eines Prozesses mit niedriger PID (unter 1)

Prozesse mit PIDs unter 1 sind normalerweise Systemprozesse, die für die Stabilität des Systems unerlässlich sind. Das unsachgemäße Beenden dieser Prozesse kann zu Systemfehlern und Datenverlust führen. Daher ist es dringend davon abzuraten, Prozesse mit niedriger PID zu beenden.

Warum kann ich Prozesse mit niedriger PID nicht beenden?

Wenn du versuchst, einen Prozess mit einer PID unter 1 zu beenden, erhältst du wahrscheinlich die Fehlermeldung "Permission denied". Dies liegt daran, dass diese Prozesse für das System von entscheidender Bedeutung sind und nur von privilegierten Benutzern (root) beendet werden dürfen.

Was kann ich tun, wenn ich einen Prozess mit niedriger PID beenden muss?

In seltenen Fällen kann es erforderlich sein, einen Prozess mit niedriger PID zu beenden, z. B. wenn er eingefroren ist oder ein Sicherheitsrisiko darstellt. In diesem Fall solltest du wie folgt vorgehen:

  1. Überprüfe, ob du als root angemeldet bist. Du kannst dies tun, indem du den Befehl whoami in ein Terminalfenster eingibst. Wenn die Ausgabe "root" lautet, bist du als root angemeldet.
  2. Verwende den Befehl kill -9. Dieser Befehl sendet ein SIGKILL-Signal an den Prozess, das sofort seine Beendigung erzwingt. Verwende diese Option jedoch nur als letzten Ausweg, da sie den Prozess ohne ordnungsgemäße Bereinigung beendet, was zu Datenverlust führen kann.

Denke daran, dass das Beenden von Prozessen mit niedriger PID mit großer Vorsicht erfolgen sollte. Wenn du dir nicht sicher bist, ob ein Prozess beendet werden sollte, wende dich an einen Systemadministrator.

Überprüfen, ob ein Prozess beendet wurde

Nachdem du einen Prozess mit kill beendet hast, solltest du überprüfen, ob er erfolgreich beendet wurde oder nicht. Es gibt mehrere Möglichkeiten, dies zu tun.

Status eines Prozesses mit ps überprüfen

Der Befehl ps kann verwendet werden, um den Status eines Prozesses anzuzeigen. Gib ps -p PID ein, wobei PID die Prozess-ID des Prozesses ist, dessen Status du überprüfen möchtest. Wenn der Prozess noch läuft, wird er in der Ausgabe aufgelistet. Wenn der Prozess beendet wurde, wird er nicht in der Ausgabe aufgelistet.

kill -0 verwenden

Der Befehl kill -0 kann verwendet werden, um zu überprüfen, ob ein Prozess noch läuft. Wenn der Prozess noch läuft, gibt kill -0 den Exit-Code 0 zurück. Wenn der Prozess beendet wurde, gibt kill -0 den Exit-Code 1 zurück.

$ kill -0 PID

pgrep verwenden

Der Befehl pgrep kann verwendet werden, um nach Prozessen zu suchen, die einem bestimmten Muster entsprechen. Wenn der Prozess noch läuft, gibt pgrep die PID des Prozesses zurück. Wenn der Prozess beendet wurde, gibt pgrep nichts zurück.

$ pgrep Prozessname

Beenden mehrerer Prozesse anhand ihrer PIDs

Wenn du mehrere Prozesse beenden möchtest, kannst du mehrere PIDs in einem einzigen Befehl angeben. Dies ist nützlich, wenn du eine Gruppe verwandter Prozesse oder Prozesse beenden möchtest, die sich in einer Schleife befinden.

Vorgehensweise

Verwende den folgenden Befehl, um mehrere Prozesse anhand ihrer PIDs zu beenden:

kill PID1 PID2 PID3 ...

Ersetze "PID1", "PID2", "PID3" usw. durch die tatsächlichen PIDs der Prozesse, die du beenden möchtest. Du kannst so viele PIDs angeben, wie du möchtest.

Beispiele

Nehmen wir an, du hast drei Prozesse mit den PIDs 1234, 5678 und 9012, die du beenden möchtest. Du würdest den folgenden Befehl ausführen:

kill 1234 5678 9012

Dies würde alle drei Prozesse beenden.

Fehlerbehebung

Wenn du beim Versuch, einen Prozess mit der PID 0 zu beenden, eine Fehlermeldung erhältst, liegt dies wahrscheinlich daran, dass der Prozess noch verwendet wird oder du nicht die Berechtigung hast, ihn zu beenden. Versuche, den Prozess mit einer höheren Berechtigung erneut zu beenden.

Beenden von Prozessen in anderen Terminals

Wenn du einen Prozess beenden möchtest, der in einem anderen Terminal ausgeführt wird, musst du den Befehl pkill verwenden. Dieser Befehl sendet ein Signal an einen Prozess, der mit einem bestimmten Namen oder einer bestimmten PID übereinstimmt.

Um einen Prozess anhand seiner PID zu beenden, verwende die folgende Syntax:

pkill -PID PID

Dabei ist PID die Prozess-ID des Prozesses, den du beenden möchtest.

Wenn du beispielsweise einen Prozess mit der PID 1234 beenden möchtest, würdest du den folgenden Befehl verwenden:

pkill -PID 1234

Du kannst pkill auch verwenden, um Prozesse anhand ihres Namens zu beenden. Die Syntax dafür lautet:

pkill Name

Dabei ist Name der Name des Prozesses, den du beenden möchtest.

Wenn du beispielsweise alle Prozesse mit dem Namen "chrome" beenden möchtest, würdest du den folgenden Befehl verwenden:

pkill chrome

pkill kann auch verwendet werden, um Prozesse in anderen Terminals zu beenden. Um dies zu tun, musst du die Option -t angeben, gefolgt von der Terminalnummer. Die Syntax dafür lautet:

pkill -t Terminalnummer Name

Dabei ist Terminalnummer die Nummer des Terminals, in dem der Prozess ausgeführt wird, und Name der Name des Prozesses, den du beenden möchtest.

Wenn du beispielsweise einen Prozess mit dem Namen "chrome" im Terminal 3 beenden möchtest, würdest du den folgenden Befehl verwenden:

pkill -t 3 chrome

Hinweis: Du musst über ausreichende Berechtigungen verfügen, um Prozesse in anderen Terminals zu beenden.

Folge uns

Neue Posts

Beliebte Posts