Comment tuer un processus Linux par numéro de port

Comment tuer un processus Linux par numéro de port

Pour tuer un processus Linux, vous avez besoin de son ID ou de son nom. Si tout ce que vous savez est le port qu’il utilise, pouvez-vous le tuer ? Oui, de plusieurs manières différentes.

Processus de mise à mort

Parfois, un processus Linux peut ne plus répondre. Il peut cesser de fonctionner correctement ou continuer à fonctionner mais ignorer les demandes de désactivation ou commencer à consommer de la mémoire, du processeur ou de la bande passante réseau.

Quels que soient vos motifs, il existe des moyens de tuer un processus à partir de la ligne de commande Linux. La méthode classique consiste à utiliser la commande kill avec l’identifiant du processus que vous souhaitez tuer. L’ killéquipe a plusieurs parents proches. La commande pkilltuera le processus par son nom et killalltuera tous les processus qu’elle peut trouver qui partagent une partie du nom.

Si tout ce que vous savez d’un processus, c’est qu’il utilise un port sur votre ordinateur, il existe toujours des moyens de l’identifier et de le tuer. En termes de réseau, « port » peut signifier une connexion physique dans laquelle vous branchez un câble avec une prise à l’extrémité, comme un câble réseau CAT5 ou 6 , ou cela peut signifier un port logiciel.

Le port logiciel est la dernière partie de la connexion réseau. L’adresse IP du périphérique identifie un ordinateur ou un autre périphérique réseau. Les applications à l’intérieur d’un ordinateur utilisent différents ports. Ils offrent un niveau de détail différent. Le trafic réseau est arrivé au bon ordinateur en utilisant une adresse IP, et avec l’adressage de port, il peut être livré à la bonne application.

Ceci est similaire à la façon dont le courrier postal arrive à un hôtel, est ensuite trié et livré dans les chambres appropriées. Une adresse IP est comme l’adresse d’un hôtel et les numéros de chambre sont comme des numéros de port.

Si vous voyez une activité réseau sur un port et que vous ne reconnaissez pas le processus qui le crée, ou si son comportement cause des problèmes ou des soupçons, vous voudrez peut-être tuer ce processus. Même si tout ce que vous savez est le numéro de port, vous pouvez suivre le processus et le tuer.

Établir des liens avec socat

Afin que nous ayons plusieurs connexions à tuer, nous allons utiliser socatpour créer des connexions réseau en utilisant différents protocoles. Vous devrez installer socat. Pour l’installer sur Ubuntu, utilisez cette commande :

sudo apt install socat

Installation de socket sur Ubuntu

Sur Fedora, utilisez dnf:

sudo dnf install socat

Installation de socket sur Fedora

Sur Manjaro vous devez taper :

sudo pacman -S socat

Installation de jus sur Manjaro

La syntaxe socatest simple, bien qu’un peu verbeuse. Nous devons spécifier les adresses source et destination. Pour chacun d’eux, nous devons spécifier le protocole, l’adresse IP et le numéro de port. Nous pouvons remplacer STDIN ou STDOUT comme source ou destination.

Cette commande crée une connexion entre un socket d’écoute TCP sur le port 7889, une adresse IP de bouclage de 127.0.0.1 et STDOUT. L’esperluette  » & » exécute la commande en arrière-plan, nous conservons donc l’accès à la ligne de commande.

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

Création d'une connexion de socket TCP d'écoute avec socat

Nous allons créer deux connexions supplémentaires afin d’avoir une petite sélection de sockets utilisant différents protocoles. Nous allons créer une connexion UDP et une connexion SCTP . La seule partie de la commande qui change est le protocole.

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

Création de connexions d'écoute de socket UDP et SCTP avec socat

Utilisation de l’assassinat

Bien sûr, nous pouvons utiliser killpour terminer un processus si nous connaissons l’identifiant du processus. Pour trouver le PID, nous pouvons utiliser lsofla commande.

Pour répertorier les détails du processus sur le port 7889, qui utilise le protocole TCP, nous utilisons l’ -ioption (adresse Internet), comme indiqué ici.

lsof -i tcp:7889

Utilisation de lsof pour afficher les détails d'un processus utilisant un port et un protocole spécifiques.

Le PID de ce processus est 3141 et on peut l’utiliser avec kill:

sudo kill 3141

Nous pouvons économiser des efforts si nous utilisons des tuyaux. Si nous dirigeons la sortie lsofvers une awkcommande awkpour rechercher les lignes contenant le port qui nous intéresse – 7889 – et imprimons le deuxième champ à partir de cette ligne, nous isolons le PID.

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

Redirigez la sortie de lsof vers awk

Nous pouvons ensuite diriger la sortie awkvers killla commande en utilisant xargs. Une commande xargsprend une entrée via un pipeline et la transmet à une autre commande en tant que paramètres de ligne de commande. Nous allons utiliser xargsavec killl’équipe.

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

Utilisation de canaux pour diriger la sortie de lsof vers awk et de awk vers xargs et kill

Nous n’avons aucun retour visuel. À la manière typique de Linux, aucune nouvelle n’est une bonne nouvelle. Si vous voulez vous assurer que le processus est terminé, vous pouvez réutiliser lsof.

lsof -i tcp:7889

Utilisation de lsof pour rechercher les détails du processus à l'aide d'un port et d'un protocole spécifiques sans succès

Puisqu’il lsofne rapporte rien, nous savons qu’il n’y a pas un tel lien.

Nous pouvons supprimer un processus utilisant le protocole UDP en remplaçant simplement « tcp » par « udp » dans notre commande précédente.

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

Utilisation de canaux pour diriger la sortie de lsof vers awk et de awk vers xargs et kill pour le socket UDP

Cependant, lsofil ne reconnaît pas le protocole SCTP.

lsof -i sctp:7889

lsof ne fonctionne pas avec le protocole SCTP

Nous pouvons utiliser une sscommande pour le faire. Nous utilisons l’ -Soption (SCTP) pour rechercher des sockets SCTP, l’ -aoption (all) pour rechercher tous les types de sockets (écoute, réception, connecté, etc.) et l’ -poption (processus) pour répertorier les informations sur le processus à l’aide de la prise.

ss -Sap

Imprimer les détails du processus à l'aide du socket SCTP avec ss

Nous pouvons analyser cette sortie en utilisant grepet awk. Nous pourrions également l’analyser avec grepdes expressions régulières PERL, mais cette méthode est beaucoup plus facile à comprendre. Si vous deviez l’utiliser plus d’une ou deux fois, vous en feriez probablement un alias ou une fonction shell.

Nous enverrons la sortie de ssà grepet trouverons notre numéro de port, 7889. Nous enverrons la sortie de grepà awk. Dans awk, nous utilisons -Fl’option (chaîne de séparation) pour définir une virgule  » , » comme séparateur de champ. Nous recherchons une ligne contenant « pid= » et imprimons le deuxième champ délimité par des virgules à partir de cette ligne.

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

Utilisation de tuyaux pour connecter ss, grep et awk pour extraire la chaîne PID

Cela nous a donné la chaîne « pid=2859 ».

Nous pouvons le transmettre à awknouveau, définir le séparateur de champ sur le signe égal  » = » et imprimer le deuxième champ à partir de cette ligne, qui sera le texte derrière le signe égal.

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

Utilisation de tuyaux pour connecter ss, grep et awk deux fois pour extraire le PID

Nous avons maintenant isolé l’ID de processus. Nous pouvons utiliser xargspour passer le PID en tant killque paramètre de ligne de commande.

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

Utilisation de canaux avec ss, grep, awk et xargs pour terminer un processus de socket SCTP

Cela tue le processus qui utilisait le socket de protocole SCTP sur le port 7889.

Équipe de fusion

La commande fusersimplifie grandement le travail. L’inconvénient est qu’il ne fonctionne qu’avec les sockets TCP et UDP. Du côté positif, ce sont les deux types de prises les plus courants que vous devrez gérer. La commande fusera déjà été installée sur les machines Ubuntu, Fedora et Manjaro que nous avons testées.

Tout ce que vous avez à faire est d’utiliser l’ -koption (kill) et de spécifier le port et le protocole. Vous pouvez soit utiliser -nl’option (espace de noms) et spécifier le protocole et le port, soit utiliser le « format d’étiquette de barre oblique » et spécifier d’abord le numéro de port.

fuser -n tcp 7889 fuser 7889/udp

Utilisation de la commande fuser pour tuer les processus utilisant les sockets TCP et UDP

Le numéro de port, le protocole et le PID du processus terminé sont imprimés dans la fenêtre du terminal.

Essayez d’abord l’unité de fusion

Il sera très probablement installé sur l’ordinateur sur lequel vous travaillez et le protocole sera très probablement TCP ou UDP, il y a donc de fortes chances que le moyen le plus simple fonctionne pour vous.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *