So beenden Sie einen Linux-Prozess nach Portnummer

So beenden Sie einen Linux-Prozess nach Portnummer

Um einen Linux-Prozess zu beenden, benötigen Sie seine ID oder seinen Namen. Wenn Sie nur den verwendeten Port kennen, können Sie ihn töten? Ja, auf verschiedene Weise.

Tötungsprozesse

Manchmal kann ein Linux-Prozess nicht mehr reagieren. Es funktioniert möglicherweise nicht mehr richtig oder funktioniert weiterhin, ignoriert jedoch Anforderungen zum Ausschalten oder beginnt, Speicher, CPU oder Netzwerkbandbreite zu verbrauchen.

Was auch immer Ihre Motive sind, es gibt Möglichkeiten, einen Prozess von der Linux-Befehlszeile aus zu beenden. Die klassische Methode besteht darin, den Kill-Befehl mit der ID des Prozesses zu verwenden, den Sie beenden möchten. Das killTeam hat mehrere nahe Verwandte. Der Befehl pkillbeendet den Prozess nach Namen und killallbeendet alle Prozesse, die er finden kann und die einen Teil des Namens teilen.

Wenn Sie über einen Prozess nur wissen, dass er einen Port auf Ihrem Computer verwendet, gibt es immer noch Möglichkeiten, ihn zu identifizieren und zu beenden. In Netzwerkbegriffen kann „Port“ eine physische Verbindung bedeuten, an die Sie ein Kabel mit einem Stecker am Ende anschließen, z. B. ein CAT5- oder 6-Netzwerkkabel , oder es kann einen Softwareport bedeuten.

Der Softwareport ist der letzte Teil der Netzwerkverbindung. Die Geräte-IP-Adresse identifiziert einen Computer oder ein anderes Netzwerkgerät. Anwendungen innerhalb eines Computers verwenden unterschiedliche Ports. Sie bieten einen anderen Detaillierungsgrad. Der Netzwerkdatenverkehr ist über eine IP-Adresse auf dem richtigen Computer angekommen und kann mit der Port-Adressierung an die richtige Anwendung übermittelt werden.

Das ist vergleichbar damit, wie die Post in einem Hotel ankommt, dort sortiert und in die entsprechenden Zimmer geliefert wird. Eine IP-Adresse ist wie eine Hoteladresse und Zimmernummern sind wie Portnummern.

Wenn Sie Netzwerkaktivität auf einem Port sehen und den Prozess, der ihn erstellt, nicht erkennen oder wenn sein Verhalten Probleme oder Verdacht verursacht, sollten Sie diesen Prozess beenden. Selbst wenn Sie nur die Portnummer kennen, können Sie den Prozess verfolgen und beenden.

Verbindungen herstellen mit socat

Damit wir mehrere Verbindungen zum Abbruch haben, werden wir socatNetzwerkverbindungen mit verschiedenen Protokollen erstellen. Sie müssen installieren socat. Verwenden Sie diesen Befehl, um es unter Ubuntu zu installieren:

sudo apt install socat

Socket auf Ubuntu installieren

Auf Fedora verwenden dnf:

sudo dnf install socat

Socket auf Fedora installieren

Auf Manjaro müssen Sie Folgendes eingeben:

sudo pacman -S socat

Juice auf Manjaro installieren

Die Syntax socatist einfach, wenn auch etwas ausführlich. Wir müssen die Quell- und Zieladresse angeben. Für jeden von ihnen müssen wir das Protokoll, die IP-Adresse und die Portnummer angeben. Wir können STDIN oder STDOUT als Quelle oder Ziel ersetzen.

Dieser Befehl erstellt eine Verbindung zwischen einem TCP-Listening-Socket auf Port 7889, einer Loopback-IP-Adresse von 127.0.0.1 und STDOUT. Das kaufmännische Und “ &“ führt den Befehl im Hintergrund aus, sodass wir den Zugriff auf die Befehlszeile behalten.

socat tcp-listen:7889,bind=127.0.0.1 stdout &

Erstellen einer lauschenden TCP-Socket-Verbindung mit socat

Wir werden zwei weitere Verbindungen erstellen, damit wir eine kleine Auswahl an Sockets haben, die unterschiedliche Protokolle verwenden. Wir erstellen eine UDP -Verbindung und eine SCTP -Verbindung . Der einzige Teil des Befehls, der sich ändert, ist das Protokoll.

socat udp-listen:7889,bind=127.0.0.1 stdout & socat sctp-listen:9999,bind=127.0.0.1 stdout &

Erstellen von UDP- und SCTP-Socket-Listening-Verbindungen mit socat

Verwendung von Mord

Natürlich können wir verwenden kill, um einen Prozess zu beenden, wenn wir die Prozess-ID kennen. Um die PID zu finden, können wir lsofden Befehl verwenden.

Um die Details des Prozesses auf Port 7889 aufzulisten, der das TCP-Protokoll verwendet, verwenden wir die -iOption (Internetadresse), wie hier gezeigt.

lsof -i tcp:7889

Verwenden von lsof zum Anzeigen von Details eines Prozesses, der einen bestimmten Port und ein bestimmtes Protokoll verwendet.

Die PID dieses Prozesses ist 3141 und wir können sie verwenden mit kill:

sudo kill 3141

Wir können etwas Aufwand sparen, wenn wir Pipes verwenden. Wenn wir die Ausgabe lsofan awkund den Befehl richten awk, nach Zeilen zu suchen, die den Port enthalten, an dem wir interessiert sind – 7889 – und das zweite Feld aus dieser Zeile drucken, isolieren wir die PID.

lsof -i tcp:7889 | awk '/7889/{print $2}'

Leiten Sie die lsof-Ausgabe an awk weiter

Wir können die Ausgabe dann mithilfe awkvon an killden Befehl weiterleiten xargs. Ein Befehl xargsnimmt Eingaben über eine Pipeline entgegen und übergibt sie als Befehlszeilenparameter an einen anderen Befehl. Wir werden xargsmit killdem Team verwenden.

lsof -i tcp:7889 | awk '/7889/{print $2}' | xargs kill

Pipes verwenden, um die Ausgabe von lsof an awk und von awk an xargs und kill zu leiten

Wir bekommen kein visuelles Feedback. In typischer Linux-Manier sind keine Neuigkeiten gute Neuigkeiten. Wenn Sie sicherstellen möchten, dass der Vorgang abgeschlossen wurde, können Sie ihn lsoferneut verwenden.

lsof -i tcp:7889

Verwenden von lsof zum Nachschlagen von Prozessdetails unter Verwendung eines bestimmten Ports und Protokolls ohne Erfolg

Da lsofes nichts meldet, wissen wir, dass es keine solche Verbindung gibt.

Wir können einen Prozess mit dem UDP-Protokoll entfernen, indem wir in unserem vorherigen Befehl einfach „tcp“ durch „udp“ ersetzen.

lsof -i udp:7889 | awk '/7889/{print $2}' | xargs kill

Verwenden von Pipes, um die lsof-Ausgabe an awk und von awk an xargs und kill für den UDP-Socket zu leiten

Das lsofSCTP-Protokoll wird jedoch nicht erkannt.

lsof -i sctp:7889

lsof funktioniert nicht mit dem SCTP-Protokoll

Dazu können wir einen ssBefehl verwenden. Wir verwenden die -SOption (SCTP), um nach SCTP-Sockets zu suchen, die -aOption (all), um nach allen Arten von Sockets zu suchen (lauschend, empfangend, verbunden usw.), und die -pOption (processes), um Informationen über den Prozess mithilfe von aufzulisten Steckdose.

ss -Sap

Drucken Sie Prozessdetails über SCTP-Socket mit ss

Wir können diese Ausgabe mit grepund parsen awk. Wir könnten es auch mit grepeinigen regulären PERL-Ausdrücken parsen, aber auf diese Weise ist es viel einfacher zu verstehen. Wenn Sie dies mehr als ein- oder zweimal verwenden würden, würden Sie es wahrscheinlich zu einem Alias ​​oder einer Shell-Funktion machen.

Wir senden die Ausgabe von ssan grepund finden unsere Portnummer 7889. Wir senden die Ausgabe von grepan awk. In awkverwenden wir -Fdie Option (Trennzeichenfolge), um ein Komma “ ,“ als Feldtrennzeichen festzulegen. Wir suchen nach einer Zeile, die „pid=“ enthält, und geben das zweite kommagetrennte Feld dieser Zeile aus.

ss -Sap | grep "7889"| awk -F',' '/pid=/{print $2}'

Verwenden von Pipes zum Verbinden von ss, grep und awk zum Extrahieren von PID-Strings

Dies gab uns den String „pid=2859“.

Wir können das awkwieder übergeben, das Feldtrennzeichen auf das Gleichheitszeichen “ =“ setzen und das zweite Feld aus dieser Zeile drucken, das der Text hinter dem Gleichheitszeichen sein wird.

ss -Sap | grep "7889"| awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}'

Verwenden von Pipes zum zweimaligen Verbinden von ss, grep und awk zum Extrahieren von PID

Wir haben jetzt die Prozess-ID isoliert. Wir können verwenden xargs, um die PID als killBefehlszeilenparameter zu übergeben.

ss -Sap | grep "7889"| awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}' | xargs kill

Verwenden von Pipes mit ss, grep, awk und xargs zum Beenden eines SCTP-Socket-Prozesses

Dadurch wird der Prozess beendet, der den SCTP-Protokoll-Socket auf Port 7889 verwendet hat.

Fixierer-Team

Der Befehl fuservereinfacht die Arbeit erheblich. Der Nachteil ist, dass es nur mit TCP- und UDP-Sockets funktioniert. Auf der positiven Seite sind dies die beiden häufigsten Steckdosentypen, mit denen Sie sich befassen müssen. Der Befehl fuserwurde bereits auf den von uns getesteten Ubuntu-, Fedora- und Manjaro-Rechnern installiert.

Sie müssen -klediglich die Option (kill) verwenden und den Port und das Protokoll angeben. Sie können entweder -ndie Option (Namespace) verwenden und das Protokoll und den Port angeben, oder das „Schrägstrich-Etikettenformat“ verwenden und zuerst die Portnummer angeben.

fuser -n tcp 7889 fuser 7889/udp

Verwenden des Befehls fuser zum Beenden von Prozessen, die TCP- und UDP-Sockets verwenden

Die Portnummer, das Protokoll und die PID des abgeschlossenen Vorgangs werden im Terminalfenster ausgedruckt.

Probieren Sie zuerst die Fixiereinheit aus

Es wird höchstwahrscheinlich auf dem Computer installiert, an dem Sie arbeiten, und das Protokoll wird höchstwahrscheinlich TCP oder UDP sein, also besteht eine gute Chance, dass der einfachste Weg für Sie funktioniert.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert