Comment arrêter le processus par port
Les processus qui utilisent la connexion réseau de votre système Linux occuperont un port chaque fois qu’ils téléchargent ou téléchargent des données, ou qu’ils écoutent les connexions entrantes. Un exemple courant présent sur de nombreux serveurs Linux serait le protocole SSH, qui écoute et accepte par défaut les connexions entrantes sur le port 22. En règle générale, les administrateurs peuvent arrêter un processus à l’aide du numéro PID ou en spécifiant le nom du processus. Mais dans certains cas, nous pouvons vouloir arrêter un processus en fonction du numéro de port qu’il utilise.
Pour revenir à notre exemple précédent, l’arrêt d’un processus exécuté sur le port 22 mettrait fin au processus qui utilise ce port – qui, par défaut, serait le démon SSH. Afin de tuer un processus par numéro de port, nous devons combiner de nombreux outils Linux comme fuser et la commande kill pour terminer la tâche. Voyons comment procéder. Dans ce tutoriel, vous allez apprendre à tuer un processus basé sur le numéro de port dans un système Linux.
Dans ce tutoriel, vous allez apprendre :
- Comment arrêter le processus par numéro de port avec
l’unité de fusion - Comment utiliser
ssetlsofpour voir les processus à l’aide d’un numéro de port - Comment utiliser
socatpour créer un processus factice pour les tests
Processus d’arrêt par numéro de port
Découvrez ci-dessous quelques-unes des différentes commandes Linux que nous pouvons utiliser pour tuer un processus par numéro de port. Pour faire un scénario réaliste de test de ces commandes, reportez-vous à la section sur socat ci-dessous.
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/udpSi 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
Identifier le port utilisé par un processus
Dans les exemples ci-dessus, nous avons utilisé la commande ss et la commande lsof pour déterminer quels numéros d’ID de processus utilisaient les ports que nous avons spécifiés.
Après avoir exécuté les commandes dans les exemples ci-dessus, il est recommandé d’exécuter à nouveau la commande
lsof ou ss pour s’assurer que le processus s’est terminé comme prévu. Si ce n’est pas le cas, vous pouvez essayer d’utiliser l’option -9 (SIGKILL) avec la commande kill. Vérifier le port avec 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.
Vérifier le port avec 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.
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, comme on l’a vu dans certains des exemples précédents.
Test des commandes avec socat
Afin de faciliter le test des commandes ci-dessus, 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 vues ci-dessus pour tester l’arrêt des processus.
Réflexions finales
Dans ce tutoriel, nous avons vu comment tuer un processus par le numéro de port qu’il écoute dans 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, peuvent donner le même effet que fuser, tout en étendant ses fonctionnalités pour s’adapter à divers scénarios.
