Comment tuer un processus basé sur le numéro de port sous Linux
À tout moment, votre système Linux exécute plusieurs processus simultanément. Certains de ces processus ont accès à votre réseau s’ils sont utilisés pour charger ou télécharger des données. Ces processus se lient généralement à un numéro de port particulier, ce qui peut nous permettre d’arrêter le processus en fonction d’un numéro de port.
La commande kill est un moyen pour les administrateurs système d’arrêter l’exécution d’un processus. Cependant, la commande kill n’accepte qu’un ID de processus comme argument. Les commandes pkill et killall sont deux autres options, mais celles-ci acceptent les noms de processus comme arguments.
Afin de tuer un processus en fonction de son numéro de port, nous devrons utiliser la commande fuser, ou utiliser d’autres outils de ligne de commande en conjonction avec la commande kill habituelle. Dans ce tutoriel, nous allons vous montrer plusieurs façons de tuer un processus en fonction de son numéro de port sous Linux.
Dans ce tutoriel, vous allez apprendre :
- Comment tuer un processus sur un port TCP ou UDP avec
fuser - Comment tuer un processus sur un port SCTP avec
kill - Comment voir quel processus un port utilise avec
ssetlsof - Comment lier un processus à un port à l’aide de
socatà des fins de test
Comment voir quel processus utilise un certain port
Comme mentionné précédemment, un processus à l’écoute des connexions entrantes va se lier à un port. La plupart des processus utiliseront toujours le même port, à moins qu’ils n’aient été configurés pour utiliser un port autre que celui par défaut. Par exemple, SSH utilise le port 22, HTTP utilise le port 80 et MySQL utilise le port 3306, etc. Grâce à ces connaissances, nous sommes en mesure de déterminer sur quel port un service fonctionne.
Commande lsof
Pour voir une liste des ports utilisés sur notre système, la commande lsof est utile. Par exemple, la commande suivante répertorie les informations sur le ou les processus qui utilisent le port TCP 80.
sudo lsof -i TCP:80
Avec d’autres informations, la commande lsof nous donne l’ID de processus des processus utilisant le port spécifié. Il fonctionnera également sur les ports UDP. Pour voir plus d’informations sur l’utilisation de lsof, consultez notre tutoriel sur Guide de la commande Linux lsof avec des exemples.
commande ss
Une autre commande qui peut être utilisée pour voir quels processus utilisent un port particulier est la commande ss. Certains utilisateurs peuvent le préférer à lsof, mais personnellement, nous trouvons lsof un peu plus facile à utiliser dans cette situation. Cependant, ss est capable de répertorier les processus qui utilisent d’autres protocoles, tels que les ports SCTP.
ss -Slp
Le résultat de la commande ci-dessus affichera tous les processus et ports utilisés avec SCTP. Pour voir plus d’informations sur l’utilisation de ss, consultez notre tutoriel sur l’utilisation de la commande ss sous Linux.
L’utilisation de ces deux outils nous aidera à déterminer quel ID de processus s’exécute sur un certain port, et sera également utile pour transmettre ces ID de processus à la commande kill dans certains des exemples suivants.
Lier un processus à un port avec socat
Afin de faciliter le test des commandes ci-dessous, nous pouvons utiliser la commande socat pour créer un processus factice qui se lie à un port de notre choix.
Liez un processus au port TCP 8080 :
socat tcp-listen:8080,bind=127.0.0.1 stdout &Liez un processus au port UDP 8080 :
socat udp-listen:8080,bind=127.0.0.1 stdout &Liez un processus au port SCTP 8080 :
socat sctp-listen:8080,bind=127.0.0.1 stdout &
Ces exemples mettront votre processus en arrière-plan. Ensuite, nous pouvons utiliser les commandes ci-dessous pour tester l’arrêt des processus.
Processus d’arrêt basé sur les exemples de numéros de port
Pour les processus écoutant sur un port TCP ou UDP, la commande
fuserainsi que l’option-k(kill) mettront fin aux processus associés pour vous. Il suffit de spécifier le type de port (TCP ou UDP) et le numéro de port dans votre commande. Par exemple, cela mettrait fin aux processus utilisant le port TCP 80.fuser -k 8080/tcpOu pour arrêter un processus sur le port UDP 8080 avec
fuser:fuser -k 8080/udpN’oubliez pas d’utiliser la commande
lsofpar la suite pour confirmer qu’aucun processus n’utilise le port.Si vous ne souhaitez pas utiliser
fuser, il est possible de trouver les ID de processus qui utilisent un numéro de port via la commandelsof, puis de transmettre ces données à la commandekill. Par exemple, cela mettra fin à tous les processus utilisant le port TCP 8080.lsof -i tcp:8080 | awk '/8080/{print $2}' | xargs killPour terminer un processus à l’aide d’un protocole différent tel que SCTP, nous pouvons utiliser la commande
sset rediriger le PID versla commande xargsetkill. Par exemple, la commande suivante tuerait tous les processus utilisant le port SCTP 8080.ss -Slp | grep -Po ':8080\s.*pid=\K\d+(?=,)' | xargs kill
Réflexions finales
Dans ce tutoriel, nous avons vu comment tuer un processus en fonction du numéro de port qu’il utilise sur un système Linux. La commande fuser est l’outil principal que nous utiliserions pour ce travail, mais Linux est connu pour offrir aux utilisateurs plus d’une méthode pour accomplir une tâche. En tant qu’alternatives, les commandes lsof et ss nous aident à déterminer les informations dont nous avons besoin, et en conjonction avec la commande kill, elles peuvent donner le même effet que fuser.
