Comment tuer le processus basé sur le numéro de port dans Linux
À tout moment, votre système Linux exécute simultanément plusieurs processus. Certains de ces processus ont accès à votre réseau s'ils sont utilisés pour télé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 de tuer le processus en fonction d'un numéro de port.
La commande kill est une façon dont les administrateurs système peuvent empêcher un processus d'exécuter. Cependant, la commande kill accepte uniquement un ID de processus comme argument. Les commandes pkill et killall sont deux autres options, mais celles-ci acceptent les noms de processus comme des arguments.
Afin de tuer un processus en fonction de son numéro de port, nous devrons utiliser la commande fuuser , ou utiliser d'autres outils de ligne de commande conjointement avec la commande tuer habituelle . Dans ce tutoriel, nous vous montrerons plusieurs façons de tuer un processus en fonction de son numéro de port dans Linux.
Dans ce tutoriel, vous apprendrez:
- Comment tuer un processus sur un port TCP ou UDP avec
Fuser - Comment tuer un processus sur un port SCTP avec
tuer - Comment afficher le processus qu'un port utilise avec
ssetlsof - Comment lier un processus à un port à l'aide de
socatà des fins de test
Comment afficher quel processus utilise un certain port
Comme mentionné précédemment, un processus d'écoute pour les connexions entrants va se lier à un port. La plupart des processus utiliseront toujours le même port, sauf s'ils ont été configurés pour en utiliser un non-défaut. Par exemple, SSH utilise le port 22, HTTP utilise le port 80 et MySQL utilise le port 3306, etc. Avec 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 les processus ou les processus 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 en utilisant le port spécifié. Il fonctionnera également sur les ports UDP. Pour voir plus d'informations sur la façon d'utiliser LSOF, consultez notre tutoriel sur la commande Guide de LSOF Linux 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 pour cette situation. Cependant, ss est en mesure d'énumérer des processus qui utilisent d'autres protocoles, tels que les ports SCTP.
ss -Slp
La sortie de la commande ci-dessus affichera tous les processus et ports utilisés avec SCTP. Pour voir plus d'informations sur la façon d'utiliser SS, consultez notre tutoriel sur la commande SS sur Linux.
L'utilisation de ces deux outils nous aidera à déterminer quel ID de processus est en cours d'exécution 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.
Lier un processus au port TCP 8080:
socat tcp-listen:8080,bind=127.0.0.1 stdout &Lier un processus au port UDP 8080:
socat udp-listen:8080,bind=127.0.0.1 stdout &Lier 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 la fin des processus.
Tuer le processus basé sur les exemples de numéro de port
-
Pour les processus d'écoute sur un port TCP ou UDP, la commande
Fuserainsi que l'option-k(Kill) terminera les processus connexes pour vous. Spécifiez simplement le type de port (TCP ou UDP) et le numéro de port de votre commande. Par exemple, cela mettrait fin aux processus en utilisant le port TCP 80.fuser -k 8080/tcp Ou pour tuer un processus sur le port UDP 8080 avec
fuuser: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
fuuser, il est possible de trouver les ID de processus qui utilisent un numéro de port via la commandelsof, puis passez ces données à laCommande Kill. Par exemple, cela mettra fin à tous les processus à l'aide du 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 tuyau la commande PID TOxargsettuer. Pour Exampe, la commande suivante tuerait tous les processus à l'aide du port SCTP 8080.ss -Slp | grep -Po ':8080\s.*pid=\K\d+(?=,)' | xargs kill
Réflexions de clôture
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 fuuser 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 aident-nous à déterminer les informations dont nous avons besoin, et en collaboration avec la commande kill peut donner le même effet que fusion .
